/** * @covers RecordsMan\RecordSet::add */ public function testAdd() { /** @var Item $item */ $item = Item::load(1); $subsCount = $item->subItems->count(); $item->subItems->add(SubItem::create(['title' => 'New subitem'])); $this->assertEquals($subsCount + 1, $item->subItems->count()); /** @var SubItem $createdItem */ $createdItem = SubItem::findFirst(null, ['id' => 'DESC']); $this->assertEquals($createdItem->item_id, $item->id); $this->assertEquals('New subitem', $createdItem->title); //TODO: Test counters updating, through relations, etc. }
/** * @covers RecordsMan\Record::save */ public function testSave() { // Adding new one test /** @var Item $item */ $item = Item::create(['title' => 'new test item', 'parent_id' => 1]); $itemsCount = Item::all()->count(); /** @var Item $firstItem */ $firstItem = Item::load(1); $childrenBefore = $firstItem->children_count; $this->assertEquals(null, $item->id); $item->save(); $this->assertEquals(8, $item->id); $this->assertEquals($itemsCount + 1, Item::all()->count()); // Counters updating test $subitemsCount = $firstItem->subitems_count; $newId = SubItem::create(['title' => 'new test subitem', 'item_id' => 1])->save()->get('id'); $firstItem->reload(); $this->assertEquals($childrenBefore + 1, $firstItem->children_count); $this->assertEquals($subitemsCount + 1, $firstItem->subitems_count); // Updating test /** @var SubItem $newItem */ $newItem = SubItem::load($newId); $this->assertEquals('new test subitem', $newItem->title); $newItem->setTitle('updated title')->save(); $newItem = SubItem::load($newId); $this->assertEquals('updated title', $newItem->title); // Broken foreign key test /** @var Item $topLevelItem */ $topLevelItem = Item::create(['title' => 'top-level item', 'parent_id' => 0]); $topLevelItem->save(); $this->assertTrue($topLevelItem->id > 0); /** @var SubSubItem $brokenItem */ $brokenItem = SubSubItem::create(['title' => 'broken item', 'subitem_id' => 100]); $brokenItem->save(false); $this->assertTrue($brokenItem->id > 0); $brokenItem->drop(); $this->setExpectedException('RecordsMan\\RecordsManException', '', 85); $brokenItem->save(); //TODO: relation checking, autofill datetime fields, etc. }