public function testGetSet() { $this->createModels(Order::class, $array = []); $source = DataSource::make(Order::all()); assertSame(null, $source[0]); assertSame(null, $source['0.code']); assertSame(null, $source['0.shipping']); $this->createModels(Order::class, $array = [['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1], ['code' => 'b1', 'shipping' => 'office', 'customer_id' => 1]]); $this->createModels(Order::class, []); $source = DataSource::make(Order::all()); $source->bindToModel(new Order()); assertSame(null, $source[0]); $source['0.code'] = 'a1'; $source['0.shipping'] = 'home'; $source['0.customer_id'] = 1; assertInstanceOf(Model::class, $source[0]); assertSame('home', $source['0.shipping']); assertSame('a1', $source['0.code']); $source['1.code'] = 'b1'; $source['1.shipping'] = 'office'; $source['1.customer_id'] = 2; assertInstanceOf(Model::class, $source[1]); assertSame('b1', $source['1.code']); assertSame('office', $source['1.shipping']); $source->save(); assertModelArrayEqual($source->toArray(), Order::all()->toArray()); // will the update work? $source['0.code'] = 'a1x'; $source['1.code'] = 'b1x'; assertSame('a1x', $source['0.code']); assertSame('b1x', $source['1.code']); $source->save(); assertModelArrayEqual($source->toArray(), Order::all()->toArray()); }
public function testUpdateChildren() { // --- test load $this->createModels(Customer::class, [['name' => 'Frankx', 'surname' => 'Sinatrax']]); $this->createModels(Order::class, [['code' => 'a1x', 'shipping' => 'homex', 'customer_id' => 1], ['code' => 'b1x', 'shipping' => 'officex', 'customer_id' => 1]]); $source = DataSource::make(Customer::find(1)); $source['name'] = 'Frank'; $source['surname'] = 'Sinatra'; $source['orders.0.code'] = 'a1'; $source['orders.0.shipping'] = 'home'; $source['orders.1.code'] = 'b1'; $source['orders.1.shipping'] = 'office'; $source->save(); assertEquals(1, $source['orders.0.customer_id']); assertEquals(1, $source['orders.1.customer_id']); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1], ['code' => 'b1', 'shipping' => 'office', 'customer_id' => 1]], Order::all()->toArray()); }
public function testCreateChildren() { $this->createModels(Order::class, []); $this->createModels(Book::class, []); // test creation $order = new Order(); $source = Datasource::make($order); $source['code'] = 'a1'; $source['shipping'] = 'home'; $source['customer_id'] = '1'; $source['books.0.title'] = 'Happiness'; $source['books.1.title'] = 'Delight'; $source->save(); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1]], Order::all()->toArray()); assertModelArrayEqual([['title' => 'Happiness'], ['title' => 'Delight']], Book::all()->toArray()); // repeat $source->save(); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1]], Order::all()->toArray()); assertModelArrayEqual([['title' => 'Happiness'], ['title' => 'Delight']], Book::all()->toArray()); }
public function testCreateChildren() { $this->createModels(CustomerDetail::class, []); $this->createModels(Customer::class, []); $source = DataSource::make(new CustomerDetail()); $source['id'] = 1; $source['biography'] = 'A nice life!'; $source['accepts_cookies'] = 0; $source['customer.name'] = 'Frank'; $source['customer.surname'] = 'Sinatra'; $source->save(); assertModelArrayEqual([['customer_id' => '1', 'biography' => 'A nice life!', 'accepts_cookies' => '0', 'customer' => ['id' => '1', 'name' => 'Frank', 'surname' => 'Sinatra']]], CustomerDetail::with('customer')->get()->toArray()); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); // repeat $source->save(); assertModelArrayEqual([['customer_id' => '1', 'biography' => 'A nice life!', 'accepts_cookies' => '0', 'customer' => ['id' => '1', 'name' => 'Frank', 'surname' => 'Sinatra']]], CustomerDetail::with('customer')->get()->toArray()); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); }