Passed
Pull Request — master (#4)
by Cesar
03:17
created

BuyPromotedProductTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 145
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 69
dl 0
loc 145
rs 10
c 0
b 0
f 0
wmc 8

8 Methods

Rating   Name   Duplication   Size   Complexity  
A checkPagantisOrderId() 0 18 1
A testBuyRegistered() 0 21 1
A checkAlreadyProcessed() 0 13 1
A commitPurchase() 0 9 1
A checkConcurrency() 0 12 1
A verifyPagantis() 0 5 1
A makeValidation() 0 5 1
A login() 0 11 1
1
<?php
2
3
namespace Test\Buy;
4
5
use Facebook\WebDriver\WebDriverBy;
6
use Facebook\WebDriver\WebDriverExpectedCondition;
7
use Pagantis\ModuleUtils\Exception\AlreadyProcessedException;
8
use Pagantis\ModuleUtils\Exception\NoIdentificationException;
9
use Pagantis\ModuleUtils\Exception\QuoteNotFoundException;
10
use Pagantis\SeleniumFormUtils\SeleniumHelper;
11
use Httpful\Request;
12
13
/**
14
 * Class BuyRegisteredTest
15
 * @package Test\Buy
16
 *
17
 * @group oscommerce-buy-promoted
18
 */
19
class BuyPromotedProductTest extends AbstractBuy
20
{
21
    /**
22
     * @var String $orderUrl
23
     */
24
    public $orderUrl;
25
26
    /**
27
     * Test Buy Registered
28
     */
29
    public function testBuyRegistered()
30
    {
31
        $this->prepareProductAndCheckout();
32
        $this->login();
33
        $this->fillShippingMethod();
34
        $this->fillPaymentMethod();
35
36
        // get cart total price
37
        $button = WebDriverBy::xpath("//td[@class='main']/strong[1]");
38
        $condition = WebDriverExpectedCondition::visibilityOfElementLocated($button);
39
        $this->waitUntil($condition);
40
        $cartPrice = $this->findByXpath("//td[@class='main']/strong[1]")->getText();
0 ignored issues
show
Unused Code introduced by
The assignment to $cartPrice is dead and can be removed.
Loading history...
41
42
43
        // --------------------
44
        $this->goToPagantis();
45
        $this->verifyPagantis();
46
        $this->commitPurchase();
47
        $this->checkPurchaseReturn(self::CORRECT_PURCHASE_MESSAGE);
48
        // $this->makeValidation();
49
        $this->quit();
50
    }
51
52
    /**
53
     * Login
54
     */
55
    public function login()
56
    {
57
        $this->findByName('email_address')->clear()->sendKeys($this->configuration['customeremail']);
58
        $this->findByName('password')->clear()->sendKeys($this->configuration['customerpwd']);
59
60
        $buttonSearch = WebDriverBy::id('tdb1');
61
        $condition = WebDriverExpectedCondition::visibilityOfElementLocated($buttonSearch);
62
        $this->waitUntil($condition);
63
        $buttonElement = $this->webDriver->findElement($buttonSearch);
64
        $this->webDriver->executeScript("arguments[0].scrollIntoView(true);", array($buttonElement));
65
        $buttonElement->click();
66
    }
67
68
    /**
69
     * Commit Purchase
70
     * @throws \Exception
71
     */
72
    public function commitPurchase()
73
    {
74
75
        $condition = WebDriverExpectedCondition::titleContains(self::PAGANTIS_TITLE);
76
        $this->webDriver->wait(300)->until($condition, $this->webDriver->getCurrentURL());
77
        $this->assertTrue((bool)$condition, "PR32");
78
79
        // complete the purchase with redirect
80
        SeleniumHelper::finishForm($this->webDriver);
81
    }
82
83
    /**
84
     * Verify Pagantis
85
     *
86
     * @throws \Exception
87
     */
88
    public function verifyPagantis()
89
    {
90
        $condition = WebDriverExpectedCondition::titleContains(self::PAGANTIS_TITLE);
91
        $this->webDriver->wait(300)->until($condition, $this->webDriver->getCurrentURL());
92
        $this->assertTrue((bool)$condition, $this->webDriver->getCurrentURL());
93
    }
94
95
    public function makeValidation()
96
    {
97
        $this->checkConcurrency();
98
        $this->checkPagantisOrderId();
99
        $this->checkAlreadyProcessed();
100
    }
101
102
103
    /**
104
     * Check if with a empty parameter called order-received we can get a QuoteNotFoundException
105
     */
106
    protected function checkConcurrency()
107
    {
108
        $notifyUrl = self::OSCURL.self::NOTIFICATION_FOLDER.'?order=';
109
        $this->assertNotEmpty($notifyUrl, $notifyUrl);
110
        $response = Request::post($notifyUrl)->expects('json')->send();
111
        $this->assertNotEmpty($response->body->result, $response);
112
        $this->assertNotEmpty($response->body->status_code, $response);
113
        $this->assertNotEmpty($response->body->timestamp, $response);
114
        $this->assertContains(
115
            QuoteNotFoundException::ERROR_MESSAGE,
116
            $response->body->result,
117
            "PR=>".$response->body->result
118
        );
119
    }
120
121
    /**
122
     * Check if with a parameter called order-received set to a invalid identification,
123
     * we can get a NoIdentificationException
124
     */
125
    protected function checkPagantisOrderId()
126
    {
127
        $orderId=0;
128
        $notifyUrl = self::OSCURL.self::NOTIFICATION_FOLDER.'?order='.$orderId;
129
        $this->assertNotEmpty($notifyUrl, $notifyUrl);
130
        $response = Request::post($notifyUrl)->expects('json')->send();
131
        $this->assertNotEmpty($response->body->result, $response);
132
        $this->assertNotEmpty($response->body->status_code, $response);
133
        $this->assertNotEmpty($response->body->timestamp, $response);
134
        $this->assertEquals(
135
            $response->body->merchant_order_id,
136
            $orderId,
137
            $response->body->merchant_order_id.'!='. $orderId
138
        );
139
        $this->assertContains(
140
            NoIdentificationException::ERROR_MESSAGE,
141
            $response->body->result,
142
            "PR=>".$response->body->result
143
        );
144
    }
145
146
    /**
147
     * Check if re-launching the notification we can get a AlreadyProcessedException
148
     *
149
     * @throws \Httpful\Exception\ConnectionErrorException
150
     */
151
    protected function checkAlreadyProcessed()
152
    {
153
        $notifyUrl = self::OSCURL.self::NOTIFICATION_FOLDER.'?order=145000008';
154
        $response = Request::post($notifyUrl)->expects('json')->send();
155
        $this->assertNotEmpty($response->body->result, $response);
156
        $this->assertNotEmpty($response->body->status_code, $response);
157
        $this->assertNotEmpty($response->body->timestamp, $response);
158
        $this->assertNotEmpty($response->body->merchant_order_id, $response);
159
        $this->assertNotEmpty($response->body->pagantis_order_id, $response);
160
        $this->assertContains(
161
            AlreadyProcessedException::ERROR_MESSAGE,
162
            $response->body->result,
163
            "PR51=>".$response->body->result
164
        );
165
    }
166
}
167