dynamic /
foxystripe
| 1 | <?php |
||
| 2 | |||
| 3 | namespace Dynamic\FoxyStripe\Test; |
||
| 4 | |||
| 5 | use Dynamic\FoxyStripe\Model\OptionGroup; |
||
| 6 | use Dynamic\FoxyStripe\Model\OptionItem; |
||
| 7 | use Dynamic\FoxyStripe\Model\ProductCategory; |
||
| 8 | use Dynamic\FoxyStripe\Page\ProductHolder; |
||
| 9 | use Dynamic\FoxyStripe\Page\ProductPage; |
||
| 10 | use SilverStripe\ORM\DB; |
||
| 11 | |||
| 12 | class ProductPageTest extends FS_Test |
||
| 13 | { |
||
| 14 | protected static $use_draft_site = true; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * @throws \SilverStripe\ORM\ValidationException |
||
| 18 | */ |
||
| 19 | public function setUp() |
||
| 20 | { |
||
| 21 | parent::setUp(); |
||
| 22 | |||
| 23 | $groupForItem = OptionGroup::create(); |
||
| 24 | $groupForItem->Title = 'Sample-Group'; |
||
| 25 | $groupForItem->write(); |
||
| 26 | |||
| 27 | /*$productHolder = ProductHolder::create(); |
||
| 28 | $productHolder->Title = 'Product Holder'; |
||
| 29 | $productHolder->write();*/ |
||
| 30 | } |
||
| 31 | |||
| 32 | public function testProductCreation() |
||
| 33 | { |
||
| 34 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 35 | $default = $this->objFromFixture(ProductCategory::class, 'default'); |
||
|
0 ignored issues
–
show
Unused Code
introduced
by
Loading history...
|
|||
| 36 | $holder = $this->objFromFixture(ProductHolder::class, 'default'); |
||
|
0 ignored issues
–
show
|
|||
| 37 | $product1 = $this->objFromFixture(ProductPage::class, 'product1'); |
||
| 38 | |||
| 39 | $product1->doPublish(); |
||
| 40 | $this->assertTrue($product1->isPublished()); |
||
| 41 | } |
||
| 42 | |||
| 43 | public function testProductDeletion() |
||
| 44 | { |
||
| 45 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 46 | $holder = $this->objFromFixture(ProductHolder::class, 'default'); |
||
| 47 | $holder->write(); |
||
| 48 | $product2 = $this->objFromFixture(ProductPage::class, 'product2'); |
||
| 49 | $productID = $product2->ID; |
||
| 50 | |||
| 51 | $product2->write(); |
||
| 52 | $this->assertTrue($product2->exists()); |
||
| 53 | |||
| 54 | $versions = DB::query('Select * FROM "ProductPage_Versions" WHERE "RecordID" = '.$productID); |
||
| 55 | $versionsPostPublish = array(); |
||
| 56 | foreach ($versions as $versionRow) { |
||
| 57 | $versionsPostPublish[] = $versionRow; |
||
| 58 | } |
||
| 59 | |||
| 60 | $product2->delete(); |
||
| 61 | $this->assertTrue(!$product2->exists()); |
||
| 62 | |||
| 63 | $versions = DB::query('Select * FROM "ProductPage_Versions" WHERE "RecordID" = '.$productID); |
||
| 64 | $versionsPostDelete = array(); |
||
| 65 | foreach ($versions as $versionRow) { |
||
| 66 | $versionsPostDelete[] = $versionRow; |
||
| 67 | } |
||
| 68 | |||
| 69 | $this->assertTrue($versionsPostPublish == $versionsPostDelete); |
||
| 70 | } |
||
| 71 | |||
| 72 | /** |
||
| 73 | * @throws \SilverStripe\ORM\ValidationException |
||
| 74 | */ |
||
| 75 | public function testProductTitleLeadingWhiteSpace() |
||
| 76 | { |
||
| 77 | $this->logInWithPermission('ADMIN'); |
||
| 78 | |||
| 79 | $holder = $this->objFromFixture(ProductHolder::class, 'default'); |
||
| 80 | $holder->write(); |
||
| 81 | |||
| 82 | $product = $this->objFromFixture(ProductPage::class, 'product1'); |
||
| 83 | $product->Title = ' Test with leading space'; |
||
| 84 | $product->write(); |
||
| 85 | |||
| 86 | $this->assertTrue($product->Title == 'Test with leading space'); |
||
| 87 | } |
||
| 88 | |||
| 89 | /** |
||
| 90 | * @throws \SilverStripe\ORM\ValidationException |
||
| 91 | */ |
||
| 92 | public function testProductTitleTrailingWhiteSpace() |
||
| 93 | { |
||
| 94 | $this->logInWithPermission('ADMIN'); |
||
| 95 | |||
| 96 | $holder = $this->objFromFixture(ProductHolder::class, 'default'); |
||
| 97 | $holder->write(); |
||
| 98 | |||
| 99 | $product = $this->objFromFixture(ProductPage::class, 'product1'); |
||
| 100 | $product->Title = 'Test with trailing space '; |
||
| 101 | $product->write(); |
||
| 102 | |||
| 103 | $this->assertTrue($product->Title == 'Test with trailing space'); |
||
| 104 | } |
||
| 105 | |||
| 106 | public function testProductCategoryCreation() |
||
| 107 | { |
||
| 108 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 109 | $category = $this->objFromFixture(ProductCategory::class, 'apparel'); |
||
| 110 | $categoryID = $category->ID; |
||
| 111 | |||
| 112 | $productCategory = ProductCategory::get()->filter(array('Code' => 'APPAREL'))->first(); |
||
| 113 | |||
| 114 | $this->assertTrue($categoryID == $productCategory->ID); |
||
| 115 | } |
||
| 116 | |||
| 117 | public function testProductCategoryDeletion() |
||
| 118 | { |
||
| 119 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 120 | |||
| 121 | $category = $this->objFromFixture(ProductCategory::class, 'default'); |
||
| 122 | |||
| 123 | $this->assertFalse($category->canDelete()); |
||
| 124 | |||
| 125 | $category2 = $this->objFromFixture(ProductCategory::class, 'apparel'); |
||
| 126 | $category2ID = $category2->ID; |
||
| 127 | |||
| 128 | $this->assertTrue($category2->canDelete()); |
||
| 129 | |||
| 130 | $this->logOut(); |
||
| 131 | |||
| 132 | $this->logInWithPermission('ADMIN'); |
||
| 133 | |||
| 134 | $this->assertFalse($category->canDelete()); |
||
| 135 | $this->assertTrue($category2->canDelete()); |
||
| 136 | |||
| 137 | $this->logOut(); |
||
| 138 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 139 | |||
| 140 | $category2->delete(); |
||
| 141 | |||
| 142 | $this->assertFalse(in_array($category2ID, ProductCategory::get()->column('ID'))); |
||
| 143 | } |
||
| 144 | |||
| 145 | public function testOptionGroupCreation() |
||
| 146 | { |
||
| 147 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 148 | |||
| 149 | $group = $this->objFromFixture(OptionGroup::class, 'size'); |
||
| 150 | $group->write(); |
||
| 151 | |||
| 152 | $this->assertNotNull(OptionGroup::get()->first()); |
||
| 153 | } |
||
| 154 | |||
| 155 | public function testOptionGroupDeletion() |
||
| 156 | { |
||
| 157 | $this->logInWithPermission('ADMIN'); |
||
| 158 | $group = $this->objFromFixture(OptionGroup::class, 'color'); |
||
| 159 | $group->write(); |
||
| 160 | $groupID = $group->ID; |
||
| 161 | |||
| 162 | $this->assertTrue($group->canDelete()); |
||
| 163 | |||
| 164 | $this->logOut(); |
||
| 165 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 166 | |||
| 167 | $this->assertTrue($group->canDelete()); |
||
| 168 | $group->delete(); |
||
| 169 | |||
| 170 | $this->assertFalse(in_array($groupID, OptionGroup::get()->column('ID'))); |
||
| 171 | } |
||
| 172 | |||
| 173 | public function testOptionItemCreation() |
||
| 174 | { |
||
| 175 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 176 | |||
| 177 | $optionGroup = OptionGroup::get()->filter(array('Title' => 'Sample-Group'))->first(); |
||
| 178 | |||
| 179 | $option = $this->objFromFixture(OptionItem::class, 'large'); |
||
| 180 | $option->ProductOptionGroupID = $optionGroup->ID; |
||
| 181 | $option->write(); |
||
| 182 | |||
| 183 | $optionID = $option->ID; |
||
| 184 | |||
| 185 | $optionItem = OptionItem::get()->filter(array('ProductOptionGroupID' => $optionGroup->ID))->first(); |
||
| 186 | |||
| 187 | $this->assertEquals($optionID, $optionItem->ID); |
||
| 188 | } |
||
| 189 | |||
| 190 | public function testOptionItemDeletion() |
||
| 191 | { |
||
| 192 | $this->logInWithPermission('ADMIN'); |
||
| 193 | |||
| 194 | $optionGroup = $this->objFromFixture(OptionGroup::class, 'size'); |
||
| 195 | $optionGroup->write(); |
||
| 196 | |||
| 197 | $option = $this->objFromFixture(OptionItem::class, 'small'); |
||
| 198 | $option->write(); |
||
| 199 | |||
| 200 | $optionID = $option->ID; |
||
| 201 | |||
| 202 | $this->assertTrue($option->canDelete()); |
||
| 203 | |||
| 204 | $this->logOut(); |
||
| 205 | $this->logInWithPermission('Product_CANCRUD'); |
||
| 206 | |||
| 207 | $this->assertTrue($option->canDelete()); |
||
| 208 | $option->delete(); |
||
| 209 | |||
| 210 | $this->assertFalse(in_array($optionID, OptionItem::get()->column('ID'))); |
||
| 211 | } |
||
| 212 | |||
| 213 | public function testProductDraftOptionDeletion() |
||
| 214 | { |
||
| 215 | self::$use_draft_site = false;//make sure we can publish |
||
| 216 | |||
| 217 | $this->logInWithPermission('ADMIN'); |
||
| 218 | |||
| 219 | $holder = $this->objFromFixture(ProductHolder::class, 'default'); |
||
| 220 | //build holder page, ProductPage can't be on root level |
||
| 221 | $holder->doPublish(); |
||
| 222 | |||
| 223 | $product = $this->objFromFixture(ProductPage::class, 'product1');//build product page |
||
| 224 | $product->doPublish(); |
||
| 225 | |||
| 226 | $productID = $product->ID; |
||
| 227 | |||
| 228 | $optionGroup = $this->objFromFixture(OptionGroup::class, 'size'); |
||
| 229 | //build the group for the options |
||
| 230 | $optionGroup->write(); |
||
| 231 | $option = $this->objFromFixture(OptionItem::class, 'small');//build first option |
||
| 232 | $option->write(); |
||
| 233 | $option2 = $this->objFromFixture(OptionItem::class, 'large');//build second option |
||
| 234 | $option2->write(); |
||
| 235 | |||
| 236 | $this->assertTrue($product->isPublished());//check that product is published |
||
| 237 | |||
| 238 | $product->deleteFromStage('Stage');//remove product from draft site |
||
| 239 | |||
| 240 | $this->assertTrue($product->isPublished());//check product is still published |
||
| 241 | |||
| 242 | $testOption = $this->objFromFixture(OptionItem::class, 'large'); |
||
| 243 | |||
| 244 | $this->assertThat($testOption->ID, $this->logicalNot($this->equalTo(0))); |
||
| 245 | //make sure the first option still exists |
||
| 246 | |||
| 247 | $product->doRestoreToStage();//restore page to draft site |
||
| 248 | $product->doUnpublish();//unpublish page |
||
| 249 | $product->deleteFromStage('Stage');//remove product from draft site |
||
| 250 | |||
| 251 | $checkDeleted = OptionItem::get()->filter(array('Title' => 'Large', 'ProductID' => $productID))->first(); |
||
| 252 | //query same option as above |
||
| 253 | |||
| 254 | $this->assertEquals($checkDeleted->ID, 0);//check that the ID is 0 (empty object/non-existent) |
||
| 255 | } |
||
| 256 | } |
||
| 257 |