public function testGetAuthenticatedCustomer()
 {
     $phoneNumber = new PhoneNumber();
     $phoneNumber->setType('Home')->setCountryCode('1')->setNumber('12345678');
     $user = new User();
     $user->setId(1)->setName('John Doe')->setEmail('*****@*****.**');
     $customer = new Customer();
     $customer->setId(1)->setAddress('Some rd. 1')->setCity('Some City')->setPostalCode('1234')->setCountry('Some Country')->setPhoneNumbers([$phoneNumber])->setUser($user);
     $customerArray = ['id' => 1, 'name' => 'John Doe', 'address' => 'Some rd. 1', 'city' => 'Some City', 'postalCode' => '1234', 'country' => 'Some Country', 'email' => '*****@*****.**', 'phoneNumbers' => [['type' => 'Home', 'countryCode' => '1', 'number' => '12345678']], 'balance' => 100];
     $client = $this->createMock(Client::class);
     $client->expects($this->once())->method('get')->with($this->equalTo('/customer'))->will($this->returnValue($customerArray));
     $hydrator = $this->getMockBuilder(APIHydrator::class)->disableOriginalConstructor()->getMock();
     $hydrator->expects($this->once())->method('hydrate')->with($this->equalTo($customerArray), $this->equalTo(null))->will($this->returnValue($customer));
     $service = new CustomerService($client, $hydrator, new Collection());
     $this->assertSame($customer, $service->getAuthenticatedCustomer());
 }
 public function extractProvider()
 {
     $builder = new DI\ContainerBuilder();
     $builder->addDefinitions('config/di.php');
     $di = $builder->build();
     return [[$di->get('ProductHydrator'), function () {
         $obj = new Product();
         $obj->setId(1)->setName('Test')->setDescription('Test descr')->setPrice(99.95)->setUnit('Kg')->setSubjectToVat(true);
         return $obj;
     }, ['name' => 'Test', 'description' => 'Test descr', 'price' => 99.95, 'unit' => 'Kg', 'subjectToVat' => true]], [$di->get('PhoneNumberHydrator'), function () {
         $obj = new PhoneNumber();
         $obj->setType('Home')->setCountryCode('1')->setNumber('12345678');
         return $obj;
     }, ['type' => 'Home', 'countryCode' => '1', 'number' => '12345678']], [$di->get('UserHydrator'), function () {
         $obj = new User();
         $obj->setId(1)->setName('John Doe')->setEmail('*****@*****.**')->setRole('customer')->setEmailConfirmed(true);
         return $obj;
     }, ['name' => 'John Doe', 'email' => '*****@*****.**', 'role' => 'customer']], [$di->get('CustomerHydrator'), function () {
         $phoneNumbers = [];
         $pObj = new PhoneNumber();
         $pObj->setType('Home')->setCountryCode('1')->setNumber('12345678');
         $phoneNumbers[] = $pObj;
         $user = new User();
         $user->setId(1)->setName('John Doe')->setEmail('*****@*****.**')->setRole('customer')->setEmailConfirmed(true);
         $obj = new Customer();
         $obj->setId(1)->setAddress('Some rd. 1')->setCity('Some City')->setPostalCode('1234')->setCountry('Some Country')->setPhoneNumbers($phoneNumbers)->setUser($user);
         return $obj;
     }, ['address' => 'Some rd. 1', 'city' => 'Some City', 'postalCode' => '1234', 'country' => 'Some Country', 'phoneNumbers' => [['type' => 'Home', 'countryCode' => '1', 'number' => '12345678']]]], [$di->get('TimeslotHydrator'), function () {
         $phoneNumbers = [];
         $pObj = new PhoneNumber();
         $pObj->setType('Home')->setCountryCode('1')->setNumber('12345678');
         $phoneNumbers[] = $pObj;
         $user = new User();
         $user->setId(1)->setName('John Doe')->setEmail('*****@*****.**')->setRole('customer')->setEmailConfirmed(true);
         $cObj = new Customer();
         $cObj->setId(1)->setAddress('Some rd. 1')->setCity('Some City')->setPostalCode('1234')->setCountry('Some Country')->setPhoneNumbers($phoneNumbers)->setUser($user);
         $obj = new Timeslot();
         $obj->setId(1)->setCustomer($cObj)->setStartsAt(new DateTime('2015-01-01T00:00:00Z'))->setEndsAt(new DateTime('2015-01-01T00:30:00Z'))->setCost(1)->setDuration(30)->setActive(false);
         return $obj;
     }, ['startsAt' => '2015-01-01T00:00:00+00:00', 'endsAt' => '2015-01-01T00:30:00+00:00']], [$di->get('InvoiceItemHydrator'), function () {
         $pObj = new Product();
         $pObj->setId(1)->setName('Test')->setDescription('Test descr')->setPrice(99.95)->setUnit('Kg')->setSubjectToVat(true);
         $obj = new InvoiceItem();
         $obj->setTitle('Test item')->setDescription('Item description')->setPrice(10.0)->setQuantity(2)->setUnit('Kg')->setSubjectToVat(true)->setTotal(20.0)->setProduct($pObj);
         return $obj;
     }, ['title' => 'Test item', 'description' => 'Item description', 'price' => 10.0, 'quantity' => 2, 'unit' => 'Kg', 'subjectToVat' => true]], [$di->get('InvoiceHydrator'), function () {
         $phoneNumbers = [];
         $pObj = new PhoneNumber();
         $pObj->setType('Home')->setCountryCode('1')->setNumber('12345678');
         $phoneNumbers[] = $pObj;
         $user = new User();
         $user->setId(1)->setName('John Doe')->setEmail('*****@*****.**')->setRole('customer')->setEmailConfirmed(true);
         $cObj = new Customer();
         $cObj->setId(1)->setAddress('Some rd. 1')->setCity('Some City')->setPostalCode('1234')->setCountry('Some Country')->setPhoneNumbers($phoneNumbers)->setUser($user);
         $items = [];
         $pObj = new Product();
         $pObj->setId(1)->setName('Test')->setDescription('Test descr')->setPrice(99.95)->setUnit('Kg')->setSubjectToVat(true);
         $iObj = new InvoiceItem();
         $iObj->setTitle('Test item')->setDescription('Item description')->setPrice(10.0)->setQuantity(2)->setUnit('Kg')->setSubjectToVat(true)->setTotal(20.0)->setProduct($pObj);
         $items[] = $iObj;
         $obj = new Invoice();
         $obj->setId(1)->setCustomer($cObj)->setName('John Doe')->setAddress('Some rd. 1')->setCity('Some City')->setPostalCode('1234')->setCountry('Some Country')->setItems($items)->setCreatedAt(new DateTime('2015-02-01T10:00:00Z'))->setApproved(true)->setCancelled(false)->setPaid(false)->setTotal(20.0)->setVatBase(20.0)->setVat(5.0);
         return $obj;
     }, ['name' => 'John Doe', 'address' => 'Some rd. 1', 'city' => 'Some City', 'postalCode' => '1234', 'country' => 'Some Country', 'items' => [['title' => 'Test item', 'description' => 'Item description', 'price' => 10.0, 'quantity' => 2, 'unit' => 'Kg', 'subjectToVat' => true]]]]];
 }