diff --git a/src/Builder.php b/src/Builder.php index 094795d..9c42b46 100644 --- a/src/Builder.php +++ b/src/Builder.php @@ -12,5 +12,44 @@ class Builder public function build() { + $prefix = ""; + $suffix = ''; + + $xml = collect($this->filters)->map(function ($items) { + return $this->buildEntry($items); + })->implode(''); + + return $prefix . $xml . $suffix; + } + + /** + * @param array $items + * + * @return string + */ + private function buildEntry(array $items) + { + $entry = collect($items)->map(function ($value, $key) { + return $this->buildProperty($value, $key); + })->implode(''); + + return "{$entry}"; + } + + /** + * Build XML for a property. + * + * @param string $value + * @param string $key + * + * @return string + */ + private function buildProperty($value, $key) + { + if ($key == 'from') { + $value = collect($value)->implode('|'); + } + + return ""; } } diff --git a/tests/Unit/BuilderTest.php b/tests/Unit/BuilderTest.php index eb66502..dd417f7 100644 --- a/tests/Unit/BuilderTest.php +++ b/tests/Unit/BuilderTest.php @@ -8,33 +8,37 @@ class BuilderTest extends TestCase { public function testBuild() { - $filterA = $this->getMockBuilder(Filter::class) - ->setMethods(['getProperties']) - ->getMock(); + $filterA = (new Filter()) + ->from('foo@example.com', 'test@example.com') + ->label('Some label') + ->archive(); - $filterB = $this->getMockBuilder(Filter::class) - ->setMethods(['getProperties']) - ->getMock(); - - $filterA->method('getProperties') - ->willReturn( - [ - ['from' => 'foo@example.com'], - ['shouldStar' => true], - ] - ); - - $filterB->method('getProperties') - ->willReturn( - [ - ['to' => 'bar@example.com'], - ] - ); + $filterB = (new Filter()) + ->has('from:bar@example.com') + ->star() + ->important(); $builder = new Builder([ $filterA->getProperties(), $filterB->getProperties(), ]); - $builder->build(); + + $result = $builder->build(); + + $expected = ""; + $expected .= ""; + $expected .= ''; + $expected .= ""; + $expected .= ""; + $expected .= ""; + $expected .= ''; + $expected .= ''; + $expected .= ""; + $expected .= ""; + $expected .= ""; + $expected .= ''; + $expected .= ''; + + $this->assertEquals($expected, $result); } }