expectNotToPerformAssertions(); $inco = new Inco(); $inco->name; } /** * Test set customer prop * * @return void */ public function testSetter() { $this->expectNotToPerformAssertions(); $inco = new Inco(); $inco->name = 'toto'; $inco->name; } /** * Test client wrong type. * * @return void */ public function testSetterFailWrongType() { $this->expectException(ValidationException::class); $inco = new Inco(); $inco->name = 2; } /** * Test country validation. * * @return void */ public function testSetterFailWrongTypePortionType() { $this->expectException(ValidationException::class); $inco = new Inco(); $inco->portion_type = 'toto'; } /** * Test set all props ok. * * @return void */ public function testPropsAllSetOk() { $this->expectNotToPerformAssertions(); $inco = new Inco(); XmlInco::factory(255)->make()->each(function (XmlInco $xml_inco) use ($inco) { $inco->id = 3; $inco->name = $xml_inco->name; $inco->description = $xml_inco->description; $inco->tips = $xml_inco->tips; $inco->preparation_advices = $xml_inco->preparation_advices; $inco->sell_arguments = $xml_inco->sell_arguments; $inco->allegations = new Allegations(...$xml_inco->allegations->toArray()); $inco->ingredient_list = $xml_inco->ingredient_list; $inco->allergen_list = $xml_inco->allergen_list; $inco->nutritional_values = new NutritionalValues($xml_inco->nutritional_values->toArray()); $inco->portion_amount = \is_null($xml_inco->portion_amount) ? $xml_inco->portion_amount : PortionAmount::fromJson($xml_inco->portion_amount->toArray()); $inco->portion_type = \is_null($xml_inco->portion_type) ? $xml_inco->portion_type : PortionType::make($xml_inco->portion_type->value()); $inco->is_seasonal = $xml_inco->is_seasonal; $inco->updated_at = Carbon::parse(now()->toIso8601String()); }); } /** * Test customer is json serializable. * * @return void */ public function testJsonSerialize() { $inco = new Inco(); /** @var \App\Models\XmlInco */ $xml_inco = XmlInco::factory(1)->make()->first(); $propTypes = [ 'id' => 3, 'name' => $xml_inco->name, 'description' => $xml_inco->description, 'tips' => $xml_inco->tips, 'preparation_advices' => $xml_inco->preparation_advices, 'sell_arguments' => $xml_inco->sell_arguments, 'allegations' => new Allegations(...$xml_inco->allegations->toArray()), 'ingredient_list' => $xml_inco->ingredient_list, 'allergen_list' => $xml_inco->allergen_list, 'nutritional_values' => new NutritionalValues($xml_inco->nutritional_values->toArray()), 'portion_amount' => \is_null($xml_inco->portion_amount) ? $xml_inco->portion_amount : PortionAmount::fromJson($xml_inco->portion_amount->toArray()), 'portion_type' => \is_null($xml_inco->portion_type) ? $xml_inco->portion_type : PortionType::make($xml_inco->portion_type->value()), 'is_seasonal' => $xml_inco->is_seasonal, 'updated_at' => Carbon::parse(now()->toIso8601String()) ]; foreach ($propTypes as $prop => $type) { $inco->{$prop} = $type; } $jsonDecoded = \json_decode(\json_encode($inco), true); $this->assertIsArray($jsonDecoded); $propTypes['allegations'] = $inco->allegations->jsonSerialize(); $propTypes['nutritional_values'] = $inco->nutritional_values->jsonSerialize(true); $propTypes['portion_amount'] = \is_null($inco->portion_amount) ? $inco->portion_amount : $inco->portion_amount->jsonSerialize(); $propTypes['portion_type'] = \is_null($inco->portion_type) ? $inco->portion_type : $inco->portion_type->jsonSerialize(); $propTypes['updated_at'] = $inco->updated_at->toIso8601String(); foreach ($propTypes as $key => $value) { $this->assertArrayHasKey($key, $jsonDecoded); $this->assertEquals($value, $jsonDecoded[$key]); } } /** * Test set all props fail. * * @return void */ public function testPropsAllSetNotOk() { $this->expectException(ValidationException::class); $inco = new Inco(); /** @var \App\Models\XmlInco */ $xml_inco = XmlInco::factory(1)->make()->first(); $propTypes = [ 'id' => 3, 'name' => $xml_inco->name, 'description' => $xml_inco->description, 'tips' => $xml_inco->tips, 'preparation_advices' => $xml_inco->preparation_advices, 'sell_arguments' => $xml_inco->sell_arguments, 'allegations' => new Allegations(...$xml_inco->allegations->toArray()), 'ingredient_list' => $xml_inco->ingredient_list, 'allergen_list' => 6, 'nutritional_values' => new NutritionalValues($xml_inco->nutritional_values->toArray()), 'portion_amount' => \is_null($xml_inco->portion_amount) ? $xml_inco->portion_amount : PortionAmount::fromJson($xml_inco->portion_amount->toArray()), 'portion_type' => \is_null($xml_inco->portion_type) ? $xml_inco->portion_type : PortionType::make($xml_inco->portion_type->value()), 'is_seasonal' => $xml_inco->is_seasonal, 'updated_at' => Carbon::parse(now()->toIso8601String()) ]; foreach ($propTypes as $prop => $type) { $inco->{$prop} = $type; } } /** * Test set unkown prop fail * * @return void */ public function testPropsAssignUnknown() { $this->expectException(AccessError::class); $inco = new Inco(); /** @var \App\Models\XmlInco */ $xml_inco = XmlInco::factory(1)->make()->first(); $propTypes = [ 'id' => 3, 'name' => $xml_inco->name, 'description' => $xml_inco->description, 'tips' => $xml_inco->tips, 'preparation_advices' => $xml_inco->preparation_advices, 'sell_arguments' => $xml_inco->sell_arguments, 'allegations' => new Allegations(...$xml_inco->allegations->toArray()), 'ingredient_list' => $xml_inco->ingredient_list, 'allergen_list' => $xml_inco->allergen_list, 'nutritional_values' => new NutritionalValues($xml_inco->nutritional_values->toArray()), 'portion_amount' => \is_null($xml_inco->portion_amount) ? $xml_inco->portion_amount : PortionAmount::fromJson($xml_inco->portion_amount->toArray()), 'portion_type' => \is_null($xml_inco->portion_type) ? $xml_inco->portion_type : PortionType::make($xml_inco->portion_type->value()), 'is_seasonal' => $xml_inco->is_seasonal, 'updated_at' => Carbon::parse(now()->toIso8601String()) ]; foreach ($propTypes as $prop => $type) { $inco->{$prop} = $type; } $this->assertNull($inco->unknownProp); $inco->unknownProp = 'value'; } /** * Test set prop fail wrong type * * @return void */ public function testPropsAssignWrongType() { $this->expectException(ValidationException::class); /** @var \App\Models\XmlInco */ $xml_inco = XmlInco::factory(1)->make()->first(); $inco = new Inco([ 'id' => 3, 'name' => $xml_inco->name, 'description' => $xml_inco->description, 'tips' => $xml_inco->tips, 'preparation_advices' => $xml_inco->preparation_advices, 'sell_arguments' => $xml_inco->sell_arguments, 'allegations' => new Allegations(...$xml_inco->allegations->toArray()), 'ingredient_list' => $xml_inco->ingredient_list, 'allergen_list' => $xml_inco->allergen_list, 'nutritional_values' => new NutritionalValues($xml_inco->nutritional_values->toArray()), 'portion_amount' => \is_null($xml_inco->portion_amount) ? $xml_inco->portion_amount : PortionAmount::fromJson($xml_inco->portion_amount->toArray()), 'portion_type' => \is_null($xml_inco->portion_type) ? $xml_inco->portion_type : PortionType::make($xml_inco->portion_type->value()), 'is_seasonal' => $xml_inco->is_seasonal, 'updated_at' => Carbon::parse(now()->toIso8601String()) ]); $inco->nutritional_values = 'value'; } /** * Test get inco from id. * * @return void */ public function testIncoGet() { $api = new FlucollectorApi(); $inco = $api->get(static::$xml_inco->id); $expectedInco = new Inco([ 'id' => static::$xml_inco->id, 'name' => static::$xml_inco->name, 'description' => static::$xml_inco->description, 'tips' => static::$xml_inco->tips, 'preparation_advices' => static::$xml_inco->preparation_advices, 'sell_arguments' => static::$xml_inco->sell_arguments, 'allegations' => new Allegations(...static::$xml_inco->allegations->toArray()), 'ingredient_list' => static::$xml_inco->ingredient_list, 'allergen_list' => static::$xml_inco->allergen_list, 'nutritional_values' => new NutritionalValues(static::$xml_inco->nutritional_values->toArray()), 'portion_amount' => \is_null(static::$xml_inco->portion_amount) ? static::$xml_inco->portion_amount : PortionAmount::fromJson(static::$xml_inco->portion_amount->toArray()), 'portion_type' => \is_null(static::$xml_inco->portion_type) ? static::$xml_inco->portion_type : PortionType::make(static::$xml_inco->portion_type->value()), 'is_seasonal' => static::$xml_inco->is_seasonal, 'updated_at' => Carbon::parse(static::$xml_inco->updated_at->toIso8601String()) ]); $this->assertEquals(Inco::class, get_class($inco)); $this->assertEquals($inco->id, $expectedInco->id); $this->assertEquals($inco->name, $expectedInco->name); $this->assertEquals($inco->description, $expectedInco->description); $this->assertEquals($inco->tips, $expectedInco->tips); $this->assertEquals($inco->preparation_advices, $expectedInco->preparation_advices); $this->assertEquals($inco->sell_arguments, $expectedInco->sell_arguments); $this->assertEquals($inco->allegations, $expectedInco->allegations); $this->assertEquals($inco->ingredient_list, $expectedInco->ingredient_list); $this->assertEquals($inco->allergen_list, $expectedInco->allergen_list); $this->assertEquals($inco->nutritional_values, $expectedInco->nutritional_values); $this->assertEquals($inco->portion_amount, $expectedInco->portion_amount); $this->assertEquals($inco->portion_type, $expectedInco->portion_type); $this->assertEquals($inco->is_seasonal, $expectedInco->is_seasonal); $this->assertEquals($inco->updated_at, $expectedInco->updated_at); } /** * Test get find inco * * @return void */ public function testIncoFind() { $api = new FlucollectorApi(); $results = $api->find(\strval(static::$xml_inco->id)); $expectedResult = new IncoResult([ 'id' => static::$xml_inco->id, 'name' => static::$xml_inco->name, ]); $this->assertCount(1, $results, 'Assumed there is only one results since we wanted to search using id'); $incoResult = Arr::first($results); $this->assertEquals(IncoResult::class, get_class($expectedResult)); $this->assertEquals($incoResult->id, $expectedResult->id); $this->assertEquals($incoResult->name, $expectedResult->name); } }