Skip to content

Commit

Permalink
Update tests and fix missing namespaces
Browse files Browse the repository at this point in the history
  • Loading branch information
wilr committed Mar 28, 2018
1 parent 6d2276d commit 1b67fd7
Show file tree
Hide file tree
Showing 33 changed files with 201 additions and 225 deletions.
5 changes: 0 additions & 5 deletions _config.php

This file was deleted.

4 changes: 3 additions & 1 deletion _config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ SilverShop\Model\Variation\Variation:
SilverShop\Model\Order:
extensions:
- SilverShop\Discounts\Extensions\DiscountedOrderExtension
modifiers:
- SilverShop\Discounts\Model\Modifiers\OrderDiscountModifier
SilverShop\Model\OrderItem:
extensions:
- SilverShop\Discounts\Extensions\DiscountedOrderItem
SilverShop\Discounts\Model\Discount:
constraints:
extensions:
- SilverShop\Discounts\Extensions\Constraints\CategoriesDiscountConstraint
- SilverShop\Discounts\Extensions\Constraints\ProductsDiscountConstraint
- SilverShop\Discounts\Extensions\Constraints\GroupDiscountConstraint
Expand Down
51 changes: 13 additions & 38 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -1,39 +1,14 @@
<!--
PHPUnit configuration for SilverStripe
Requires PHPUnit 3.5+
Usage:
- "phpunit": Runs all tests in all folders
- "phpunit framework/tests/": Run all tests of the framework module
- "phpunit framework/tests/filesystem": Run all filesystem tests within the framework module
- "phpunit framework/tests/filesystem/FolderTest.php": Run a single test
- "phpunit <dash><dash>coverage-html assets/": Generate coverage report (replace <dash> with "-", requires xdebug)
More information:
- http://www.phpunit.de/manual/current/en/textui.html
- http://doc.silverstripe.org/framework/en/topics/testing/#configuration
-->
<phpunit bootstrap="../framework/tests/bootstrap.php" colors="true">

<testsuite name="Default">
<directory>tests</directory>
</testsuite>

<listeners>
<listener class="SS_TestListener" file="../framework/dev/TestListener.php" />
</listeners>

<groups>
<exclude>
<group>sanitychecks</group>
</exclude>
</groups>

<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">code</directory>
</whitelist>
</filter>

<phpunit bootstrap="vendor/silverstripe/framework/tests/bootstrap.php" colors="true">
<testsuite name="Default">
<directory>tests/php</directory>
</testsuite>

<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src/</directory>
<exclude>
<directory suffix=".php">tests/</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
6 changes: 3 additions & 3 deletions src/Admin/DiscountModelAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ public function getList()
if (isset($params['HasBeenUsed'])) {
$list = $list
->leftJoin("SilverShop_OrderItem_Discounts", "\"SilverShop_OrderItem_Discounts\".\"DiscountID\" = \"Discount\".\"ID\"")
->leftJoin("OrderDiscountModifier_Discounts", "\"OrderDiscountModifier_Discounts\".\"DiscountID\" = \"Discount\".\"ID\"")
->leftJoin("SilverShop_OrderDiscountModifier_Discounts", "\"SilverShop_OrderDiscountModifier_Discounts\".\"DiscountID\" = \"Discount\".\"ID\"")
->innerJoin("OrderAttribute", implode(" OR ", [
"\"OrderAttribute\".\"ID\" = \"SilverShop_OrderItem_Discounts\".\"Product_OrderItemID\"",
"\"OrderAttribute\".\"ID\" = \"OrderDiscountModifier_Discounts\".\"OrderDiscountModifierID\""
"\"SilverShop_OrderAttribute\".\"ID\" = \"SilverShop_OrderItem_Discounts\".\"Product_OrderItemID\"",
"\"SilverShop_OrderAttribute\".\"ID\" = \"SilverShop_OrderDiscountModifier_Discounts\".\"SilverShop_OrderDiscountModifierID\""
]));
}

Expand Down
6 changes: 4 additions & 2 deletions src/Calculator.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
use SilverShop\Discounts\Model\Modifiers\OrderDiscountModifier;
use SilverShop\Discounts\Actions\ItemPercentDiscount;
use SilverStripe\Core\Injector\Injectable;
use SilverStripe\Core\Injector\Injector;
use SilverShop\Model\Order;
use SilverStripe\ORM\DataList;

class Calculator
{
Expand Down Expand Up @@ -50,8 +52,8 @@ public function calculate()

// item discounts will update info items
$action = $discount->Type === "Percent" ?
\Injector::inst()->createWithArgs(ItemPercentDiscount::class, [$infoitems, $discount]) :
\Injector::inst()->createWithArgs(\ItemFixedDiscount::class, [$infoitems, $discount]);
Injector::inst()->createWithArgs(ItemPercentDiscount::class, [$infoitems, $discount]) :
Injector::inst()->createWithArgs(ItemFixedDiscount::class, [$infoitems, $discount]);

$action->perform();
}
Expand Down
7 changes: 2 additions & 5 deletions src/Extensions/Constraints/DatetimeDiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use SilverStripe\Forms\DatetimeField;
use SilverStripe\ORM\DataList;


class DatetimeDiscountConstraint extends DiscountConstraint
{
private static $db = [
Expand All @@ -35,17 +34,15 @@ public function filter(DataList $list)

//to bad ORM filtering for NULL doesn't work...so we need to use where
return $list->where(
"(\"Discount\".\"StartDate\" IS NULL) OR (\"Discount\".\"StartDate\" < '$datetime')"
"(\"SilverShop_Discount\".\"StartDate\" IS NULL) OR (\"SilverShop_Discount\".\"StartDate\" < '$datetime')"
)
->where(
"(\"Discount\".\"EndDate\" IS NULL) OR (\"Discount\".\"EndDate\" > '$datetime')"
"(\"SilverShop_Discount\".\"EndDate\" IS NULL) OR (\"SilverShop_Discount\".\"EndDate\" > '$datetime')"
);
}

public function check(Discount $discount)
{

//time period
$startDate = strtotime($discount->StartDate);
$endDate = strtotime($discount->EndDate);

Expand Down
15 changes: 0 additions & 15 deletions src/Extensions/Constraints/DiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace SilverShop\Discounts\Extensions\Constraints;


use SilverShop\Discounts\Model\Discount;
use SilverStripe\ORM\DataExtension;
use SilverShop\Model\Order;
Expand Down Expand Up @@ -68,20 +67,6 @@ public function filter(DataList $discounts)
*/
abstract public function check(Discount $discount);


/**
* Set up constraints via _config.php
*/
public static function set_up_constraints()
{
$discount = Injector::inst()->get(Discount::class);
$constraints = $discount->config()->constraints;

foreach ($constraints as $constraint) {
Discount::add_extension($constraint);
}
}

protected function message($messsage, $type = "good")
{
$this->message = $messsage;
Expand Down
4 changes: 2 additions & 2 deletions src/Extensions/Constraints/ItemDiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ abstract class ItemDiscountConstraint extends DiscountConstraint
public static function match(OrderItem $item, Discount $discount)
{
$singletons = [];
$itemconstraints = ClassInfo::subclassesFor("ItemDiscountConstraint");
$itemconstraints = ClassInfo::subclassesFor(self::class);

array_shift($itemconstraints); //exclude abstract base class

$configuredconstraints = Config::inst()->forClass(Discount::class)->constraints;
$configuredconstraints = Injector::inst()->get(Discount::class)->getConstraints();

//get only the configured item constraints
$classes = array_intersect($itemconstraints, $configuredconstraints);
Expand Down
6 changes: 3 additions & 3 deletions src/Extensions/Constraints/MembershipDiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ public function filter(DataList $list)
$memberid = $member->ID;
}
$list = $list->leftJoin(
"Discount_Members",
"\"Discount_Members\".\"DiscountID\" = \"Discount\".\"ID\""
)->where("(\"Discount_Members\".\"MemberID\" IS NULL) OR \"Discount_Members\".\"MemberID\" = $memberid");
"SilverShop_Discount_Members",
"\"SilverShop_Discount_Members\".\"SilverShop_DiscountID\" = \"SilverShop_Discount\".\"ID\""
)->where("(\"SilverShop_Discount_Members\".\"MemberID\" IS NULL) OR \"SilverShop_Discount_Members\".\"MemberID\" = $memberid");

return $list;
}
Expand Down
6 changes: 3 additions & 3 deletions src/Extensions/Constraints/ProductsDiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,17 @@ public function check(Discount $discount)

// if no products in the discount even
if (!$products->exists()) {
$curr = Versioned::current_stage();
$curr = Versioned::get_stage();

Versioned::reading_stage('Stage');
Versioned::set_stage('Stage');
$products = $discount->Products();

if (!$products->exists()) {
return true;
}

$constraintproductids = $products->map('ID', 'ID')->toArray();
Versioned::reading_stage($curr);
Versioned::set_stage($curr);
} else {
$constraintproductids = $products->map('ID', 'ID')->toArray();
}
Expand Down
5 changes: 0 additions & 5 deletions src/Extensions/Constraints/UseLimitDiscountConstraint.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@

namespace SilverShop\Discounts\Extensions\Constraints;


use SilverShop\Discounts\Model\Discount;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\NumericField;


/**
* @package silvershop-discounts
*/
class UseLimitDiscountConstraint extends DiscountConstraint
{
private static $db = [
Expand Down
14 changes: 5 additions & 9 deletions src/Extensions/ProductSpecificPricingExtension.php
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
<?php

namespace SilverShop\Discounts\Checkout\Extensions;
namespace SilverShop\Discounts\Extensions;

use SilverStripe\ORM\DataExtension;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridField;
use GridFieldConfig_RecordEditor;
use SpecificPrice;
use Member;
use SilverStripe\Forms\GridField\Config_RecordEditor;
use SilverShop\Discounts\Model\SpecificPrice;
use SilverStripe\Security\Member;


/**
* @package silvershop-discounts
*/
class SpecificPricingExtension extends DataExtension
{
private static $has_many = [
"SpecificPrices" => "SpecificPrice"
"SpecificPrices" => SpecificPrice::class
];

public function updateCMSFields(FieldList $fields)
Expand Down
10 changes: 7 additions & 3 deletions src/ItemPriceInfo.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
<?php

namespace Shop\Discount;
namespace SilverShop\Discounts;

use SilverShop\Discounts\PriceInfo;
use SilverShop\Model\OrderItem;

/**
* Wrap PriceInfo with order item info
*/
class ItemPriceInfo extends PriceInfo
{
protected $item;

protected $quantity;

public function __construct(\OrderItem $item)
public function __construct(OrderItem $item)
{
$this->item = $item;
$this->quantity = $item->Quantity;
Expand Down Expand Up @@ -44,7 +48,7 @@ public function debug()
$val = "item: ".$this->getItem()->TableTitle();
$price = $this->getOriginalPrice();
$val .= " price:$price discount:$discount total:$total.\n";

if ($best = $this->getBestAdjustment()) {
$val .= $this->getBestAdjustment()." ";
$val .= $this->getBestAdjustment()->getAdjuster()->Title;
Expand Down
36 changes: 28 additions & 8 deletions src/Model/Discount.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
use SilverStripe\Dev\Deprecation;
use SilverShop\Discounts\Model\Modifiers\OrderDiscountModifier;
use SilverShop\Discounts\Model\Discount;
use SilverStripe\Core\Injector\Injector;
use SilverShop\Discounts\Extensions\Constraints\DiscountConstraint;

class Discount extends DataObject
{
Expand Down Expand Up @@ -93,6 +95,24 @@ class Discount extends DataObject
*/
private static $unpaid_use_timeout = 10;

/**
* @return array
*/
public function getConstraints()
{
$extensions = $this->getExtensionInstances();
$output = [];

foreach ($extensions as $extension)
{
if ($extension instanceof DiscountConstraint) {
$output[] = get_class($extension);
}
}

return $output;
}

/**
* Get the smallest possible list of discounts that can apply
* to a given order.
Expand All @@ -110,7 +130,7 @@ public static function get_matching(Order $order, $context = [])
"Percent:GreaterThan" => 0
]);

$constraints = self::config()->constraints;
$constraints = Injector::inst()->create(static::class)->getConstraints();

foreach ($constraints as $constraint) {
$discounts = singleton($constraint)
Expand Down Expand Up @@ -285,7 +305,7 @@ public function validateOrder($order, $context = [])
return false;
}

$constraints = self::config()->constraints;
$constraints = $this->getConstraints();

foreach ($constraints as $constraint) {
$constraint = singleton($constraint)
Expand Down Expand Up @@ -473,12 +493,12 @@ public function getAppliedOrders($includeunpaid = false)
public function getSavingsTotal()
{
$itemsavings = $this->OrderItems()
->innerJoin("Order", "\"OrderAttribute\".\"OrderID\" = \"Order\".\"ID\"")
->where("\"Order\".\"Paid\" IS NOT NULL")
->innerJoin("SilverShop_Order", "\"SilverShop_OrderAttribute\".\"OrderID\" = \"SilverShop_Order\".\"ID\"")
->where("\"SilverShop_Order\".\"Paid\" IS NOT NULL")
->sum("DiscountAmount");
$modifiersavings = $this->DiscountModifiers()
->innerJoin("Order", "\"OrderAttribute\".\"OrderID\" = \"Order\".\"ID\"")
->where("\"Order\".\"Paid\" IS NOT NULL")
->innerJoin("SilverShop_Order", "\"SilverShop_OrderAttribute\".\"OrderID\" = \"SilverShop_Order\".\"ID\"")
->where("\"SilverShop_Order\".\"Paid\" IS NOT NULL")
->sum("DiscountAmount");

return $itemsavings + $modifiersavings;
Expand All @@ -493,13 +513,13 @@ public function getSavingsTotal()
public function getSavingsForOrder(Order $order)
{
$itemsavings = OrderAttribute::get()
->innerJoin("SilverShop_OrderItem_Discounts", "\"OrderAttribute\".\"ID\" = \"SilverShop_OrderItem_Discounts\".\"SilverShop_OrderItemID\"")
->innerJoin("SilverShop_OrderItem_Discounts", "\"SilverShop_OrderAttribute\".\"ID\" = \"SilverShop_OrderItem_Discounts\".\"SilverShop_OrderItemID\"")
->filter("SilverShop_OrderItem_Discounts.DiscountID", $this->ID)
->filter("OrderAttribute.OrderID", $order->ID)
->sum("DiscountAmount");

$modifiersavings = OrderAttribute::get()
->innerJoin("SilverShop_OrderDiscountModifier_Discounts", "\"OrderAttribute\".\"ID\" = \"SilverShop_OrderDiscountModifier_Discounts\".\"OrderDiscountModifierID\"")
->innerJoin("SilverShop_OrderDiscountModifier_Discounts", "\"SilverShop_OrderAttribute\".\"ID\" = \"SilverShop_OrderDiscountModifier_Discounts\".\"SilverShop_OrderDiscountModifierID\"")
->filter("SilverShop_OrderDiscountModifier_Discounts.DiscountID", $this->ID)
->filter("OrderAttribute.OrderID", $order->ID)
->sum("DiscountAmount");
Expand Down
2 changes: 1 addition & 1 deletion src/Model/Modifiers/OrderDiscountModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public function getCode()
$code = Controller::curr()->getRequest()->getSession()->get("cart.couponcode");

if (!$code && $this->Order()->exists()) {
$discount = $this->Order()->Discounts();
$discounts = $this->Order()->Discounts();

foreach ($discounts as $discount) {
if ($discount->Code) {
Expand Down
Loading

0 comments on commit 1b67fd7

Please sign in to comment.