From 7a5d1835774c29cdb7193e27c1477e98d0de475b Mon Sep 17 00:00:00 2001 From: Josh Sherman Date: Tue, 5 Apr 2022 17:56:44 -0500 Subject: [PATCH] feat: get previous workday Added the ability to get the previous workday by passing in a negative number of days along with the date to start from. This update also includes some overhauling to allow for the library to be more resilient to changes in the upstream API. --- .github/workflows/test.yml | 4 +- LICENSE | 2 +- composer.json | 2 +- src/Client.php | 29 --- tests/ClientTest.php | 399 ------------------------------------- 5 files changed, 4 insertions(+), 432 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 19263c5..c492e7a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - php-version: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0'] + php-version: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'] steps: - name: Checkout uses: actions/checkout@v2 @@ -23,7 +23,7 @@ jobs: - name: Run Tests run: vendor/bin/phpunit --coverage-clover ./coverage.xml - name: Upload Coverage - if: ${{ matrix.php-version == '8.0' }} + if: ${{ matrix.php-version == '8.1' }} uses: codecov/codecov-action@v1 with: file: ./coverage.xml diff --git a/LICENSE b/LICENSE index f9f0c99..d7dcfb3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2016, 2017, 2018, 2019, 2020 Gravity Boulevard, LLC +Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021, 2022 Gravity Boulevard, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/composer.json b/composer.json index 0cd3dee..2170ae6 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "holidayapi/holidayapi-php", "description": "Official PHP library for Holiday API", - "version": "2.4.0", + "version": "3.0.0", "type": "library", "keywords": [ "calendar", diff --git a/src/Client.php b/src/Client.php index b3e295e..0793c97 100644 --- a/src/Client.php +++ b/src/Client.php @@ -64,17 +64,6 @@ class Client public function holidays($request) { - if (!isset($request['country'])) { - throw new \Exception('Missing country'); - } elseif (!isset($request['year'])) { - throw new \Exception('Missing year'); - } elseif ( - isset($request['previous'], $request['upcoming']) - && $request['previous'] && $request['upcoming'] - ) { - throw new \Exception('Previous and upcoming are mutually exclusive'); - } - return $this->request('holidays', $request); } @@ -85,29 +74,11 @@ class Client public function workday($request) { - if (!isset($request['country'])) { - throw new \Exception('Missing country'); - } elseif (!isset($request['start'])) { - throw new \Exception('Missing start date'); - } elseif (!isset($request['days'])) { - throw new \Exception('Missing days'); - } elseif ($request['days'] < 1) { - throw new \Exception('Days must be 1 or more'); - } - return $this->request('workday', $request); } public function workdays($request) { - if (!isset($request['country'])) { - throw new \Exception('Missing country'); - } elseif (!isset($request['start'])) { - throw new \Exception('Missing start date'); - } elseif (!isset($request['end'])) { - throw new \Exception('Missing end date'); - } - return $this->request('workdays', $request); } } diff --git a/tests/ClientTest.php b/tests/ClientTest.php index e999192..14f83c7 100644 --- a/tests/ClientTest.php +++ b/tests/ClientTest.php @@ -113,108 +113,6 @@ class ClientTest extends TestCase ), $client->countries()); } - public function testSearchCountries() - { - $url = self::BASE_URL . 'countries?key=' . self::KEY . '&search=Sao'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - ), $client->countries(array('search' => 'Sao'))); - } - - public function testReturnCountryByCode() - { - $url = self::BASE_URL . 'countries?key=' . self::KEY . '&country=ST'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - ), $client->countries(array('country' => 'ST'))); - } - - public function testReturnCountryWithPublic() - { - $url = self::BASE_URL . 'countries?key=' . self::KEY . '&public=1'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'countries' => array( - array( - 'code' => 'ST', - 'name' => 'Sao Tome and Principle', - ), - ), - ), $client->countries(array('public' => true))); - } - public function testCountriesRaise4xxErrors() { $url = self::BASE_URL . 'countries?key=' . self::KEY; @@ -312,106 +210,6 @@ class ClientTest extends TestCase ))); } - public function testSearchHolidays() - { - $url = self::BASE_URL . 'holidays?key=' . self::KEY . '&country=US&year=2015&search=Independence'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'holidays' => array( - array( - 'name' => 'Independence Day', - 'date' => '2015-07-04', - 'observed' => '2015-07-03', - 'public' => true, - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'holidays' => array( - array( - 'name' => 'Independence Day', - 'date' => '2015-07-04', - 'observed' => '2015-07-03', - 'public' => true, - ), - ), - ), $client->holidays(array( - 'country' => 'US', - 'year' => 2015, - 'search' => 'Independence', - ))); - } - - public function testHolidaysCountryMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->holidays(array('year' => 2015)); - } catch (\Exception $e) { - $this->$assertRegExp('/missing country/i', $e->getMessage()); - } - } - - public function testHolidaysYearMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->holidays(array('country' => 'US')); - } catch (\Exception $e) { - $this->$assertRegExp('/missing year/i', $e->getMessage()); - } - } - - public function testHolidaysBothPreviousAndUpcoming() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->holidays(array( - 'country' => 'US', - 'year' => 2015, - 'month' => 7, - 'day' => 4, - 'upcoming' => true, - 'previous' => true, - )); - } catch (\Exception $e) { - $this->$assertRegExp('/previous and upcoming/i', $e->getMessage()); - } - } - public function testHolidaysRaise4xxErrors() { $url = self::BASE_URL . 'holidays?key=' . self::KEY . '&country=US&year=2019'; @@ -500,74 +298,6 @@ class ClientTest extends TestCase ), $client->languages()); } - public function testSearchLanguages() - { - $url = self::BASE_URL . 'languages?key=' . self::KEY . '&search=Eng'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'languages' => array( - array( - 'code' => 'en', - 'name' => 'English', - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'languages' => array( - array( - 'code' => 'en', - 'name' => 'English', - ), - ), - ), $client->languages(array('search' => 'Eng'))); - } - - public function testReturnLanguageByCode() - { - $url = self::BASE_URL . 'languages?key=' . self::KEY . '&language=en'; - - $request = new Request(array( - 'execute' => array( - $url => function () - { - return json_encode(array( - 'status' => 200, - 'languages' => array( - array( - 'code' => 'en', - 'name' => 'English', - ), - ), - )); - }, - ), - )); - - $client = new Client(array('key' => self::KEY, 'handler' => $request)); - - $this->assertEquals(array( - 'status' => 200, - 'languages' => array( - array( - 'code' => 'en', - 'name' => 'English', - ), - ), - ), $client->languages(array('language' => 'en'))); - } - public function testLanguagesRaise4xxErrors() { $url = self::BASE_URL . 'languages?key=' . self::KEY; @@ -654,81 +384,6 @@ class ClientTest extends TestCase ))); } - public function testWorkdayCountryMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workday(array()); - } catch (\Exception $e) { - $this->$assertRegExp('/missing country/i', $e->getMessage()); - } - } - - public function testWorkdayStartMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workday(array('country' => 'US')); - } catch (\Exception $e) { - $this->$assertRegExp('/missing start date/i', $e->getMessage()); - } - } - - public function testWorkdayDaysMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workday(array( - 'country' => 'US', - 'start' => '2019-07-01', - )); - } catch (\Exception $e) { - $this->$assertRegExp('/missing days/i', $e->getMessage()); - } - } - - public function testWorkdayDaysNegative() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workday(array( - 'country' => 'US', - 'start' => '2019-07-01', - 'days' => -10, - )); - } catch (\Exception $e) { - $this->$assertRegExp('/days must be 1 or more/i', $e->getMessage()); - } - } - public function testWorkdayRaise4xxErrors() { $url = self::BASE_URL . 'workday?key=' . self::KEY . '&country=US&start=2019-07-01&days=10'; @@ -819,60 +474,6 @@ class ClientTest extends TestCase ))); } - public function testWorkdaysCountryMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workdays(array()); - } catch (\Exception $e) { - $this->$assertRegExp('/missing country/i', $e->getMessage()); - } - } - - public function testWorkdaysStartMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workdays(array('country' => 'US')); - } catch (\Exception $e) { - $this->$assertRegExp('/missing start date/i', $e->getMessage()); - } - } - - public function testWorkdaysEndMissing() - { - if (version_compare(PHP_VERSION, '7.3.0', '>=')) { - $assertRegExp = 'assertMatchesRegularExpression'; - } else { - $assertRegExp = 'assertRegExp'; - } - - $client = new Client(array('key' => self::KEY)); - - try { - $client->workdays(array( - 'country' => 'US', - 'start' => '2019-07-01', - )); - } catch (\Exception $e) { - $this->$assertRegExp('/missing end date/i', $e->getMessage()); - } - } - public function testWorkdaysRaise4xxErrors() { $url = self::BASE_URL . 'workdays?key=' . self::KEY . '&country=US&start=2019-07-01&end=2019-07-10';