From 09cf724f70ca781a159e2219999f67b5803ca697 Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.uk>
Date: Thu, 4 Apr 2019 00:00:00 +0100
Subject: [PATCH] Add ability to get all conditions within a filter group

---
 src/Model/FilterGroup.php  |  5 +++++
 tests/OtherwiseHasTest.php | 29 +++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/src/Model/FilterGroup.php b/src/Model/FilterGroup.php
index ffcf12b..e33a6e9 100644
--- a/src/Model/FilterGroup.php
+++ b/src/Model/FilterGroup.php
@@ -39,4 +39,9 @@ class FilterGroup
     {
         return $this->filters;
     }
+
+    public function getConditions(): Collection
+    {
+        return $this->filters->map->getConditions();
+    }
 }
diff --git a/tests/OtherwiseHasTest.php b/tests/OtherwiseHasTest.php
index dc147a8..53c7847 100644
--- a/tests/OtherwiseHasTest.php
+++ b/tests/OtherwiseHasTest.php
@@ -5,6 +5,7 @@ namespace Tests\Opdavies\GmailFilterBuilder;
 use Opdavies\GmailFilterBuilder\Model\Filter;
 use Opdavies\GmailFilterBuilder\Model\FilterGroup;
 use PHPUnit\Framework\TestCase;
+use Tightenco\Collect\Support\Collection;
 
 class OtherwiseHasTest extends TestCase
 {
@@ -47,6 +48,34 @@ class OtherwiseHasTest extends TestCase
         });
     }
 
+    /** @test */
+    public function get_all_conditions_from_a_filter_group()
+    {
+        $filters = FilterGroup::if(
+            Filter::create()
+                ->has('to:me@example.com subject:Foo')
+                ->read()
+        )->otherwise(
+            Filter::create()
+                ->has('to:me@example.com subject:Bar')
+                ->trash()
+        )->otherwise(
+            Filter::create()
+                ->has('to:me@example.com subject:Baz')
+                ->trash()
+        );
+
+        $expected = [
+          ['to:me@example.com', 'subject:Foo'],
+          ['to:me@example.com', 'subject:Bar'],
+          ['to:me@example.com', 'subject:Baz'],
+        ];
+
+        $conditions = $filters->getConditions();
+        $this->assertInstanceOf(Collection::class, $conditions);
+        $this->assertSame($expected, $conditions->toArray());
+    }
+
     /** @test */
     public function different_conditions_are_negated_in_subsequent_filters()
     {