Skip to content
Snippets Groups Projects
Select Git revision
  • d87320de4d46d124112d7b97e5fa79e2b04a8f5b
  • master default protected
  • fix/body-raw
  • devel
  • 1.0.5
  • 1.0.4
  • 1.0.3
  • 1.0.2
  • 1.0.1
  • 1.0
10 results

changelog.txt

Blame
  • To find the state of this project's repository at the time of any of these versions, check out the tags.
    Shopify.php 3.50 KiB
    <?php
    
    namespace Octolize\Shopify\Codeception;
    
    use Codeception\Module\WebDriver;
    use Codeception\Util\Locator;
    use Exception;
    
    class Shopify extends WebDriver
    {
    
        public function loginAsAdmin(): void
        {
            $i    = $this;
            if ($i->loadSessionSnapshot('admin')) {
                return;
            }
            $i->amOnUrl($this->config['admin_url']);
            try {
                $this->amLoggedInAsAdmin($i);
            } catch (Exception $e) {
                try {
                    $i->wait(rand(1, 2));
                    $i->see('Choose an account');
                    $i->click($this->config['admin_username']);
                } catch (Exception $e) {
                    $this->loginWithGoogle($i);
                }
            }
            $i->wait(rand(1, 5));
            $i->saveSessionSnapshot('admin');
        }
    
        public function amOnPage($page): void
        {
            parent::amOnPage($page);
            $this->loginOnFront();
        }
    
        public function loginOnFront(): void
        {
            $i = $this;
            try {
                $i->seeInCurrentUrl('password');
                $i->fillField('password', $this->config['store_password']);
                $i->click('button[type=submit]');
            } catch (Exception $e) {
                // do nothing
            }
        }
    
        /**
         * @param Shopify $i
         *
         * @return void
         */
        private function amLoggedInAsAdmin(Shopify $i): void
        {
            $i->moveMouseOver('body', rand(1, 100), rand(1, 100));
            $i->seeInCurrentUrl(parse_url($this->config['admin_url'], PHP_URL_PATH));
        }
    
        /**
         * @param Shopify $i
         *
         * @return void
         * @throws Exception
         */
        private function loginWithGoogle(Shopify $i): void
        {
            $isPl = false;
            try {
                $i->waitForText('Continue with Google', 5);
            } catch (Exception $e) {
                $i->waitForText('Kontynuuj z Google', 5);
                $isPl = true;
            }
            $i->click($isPl ? 'Kontynuuj z Google' : 'Continue with Google');
            try {
                $i->seeInCurrentUrl(parse_url($this->config['admin_url'], PHP_URL_PATH));
                $i->dontSeeInCurrentUrl('google.com');
            } catch (Exception $e) {
                try {
                    $i->waitForText($this->config['admin_username']);
                    $i->clickWithLeftButton(Locator::find('div',
                        ['data-email' => $this->config['admin_username']]));
                    $i->seeInCurrentUrl(parse_url($this->config['admin_url'], PHP_URL_PATH));
                    $i->dontSeeInCurrentUrl('google.com');
                } catch (Exception $e) {
                    $this->loginToGoogle($i, $isPl);
                }
            }
        }
    
        /**
         * @param Shopify $i
         * @param bool $isPl
         *
         * @return void
         */
        private function loginToGoogle(Shopify $i, bool $isPl): void
        {
            $i->wait(rand(1, 5));
            $i->moveMouseOver('body', rand(1, 100), rand(1, 100));
            try {
                $i->seeElement('input[name="identifier"]');
                $i->fillField('identifier', $this->config['admin_username']);
                $i->click($isPl ? 'Dalej' : 'Next');
                $i->wait(rand(1, 5));
                $i->moveMouseOver('input[name=Passwd]', rand(1, 100), rand(1, 100));
                $i->fillField('Passwd', $this->config['google_password']);
                $i->click($isPl ? 'Dalej' : 'Next');
            } catch (Exception $e) {
                $i->wait(rand(1, 5));
                $i->moveMouseOver('body', rand(1, 100), rand(1, 100));
                $i->fillField('password', $this->config['google_password']);
                $i->click($isPl ? 'Dalej' : 'Next');
            }
        }
    
    }