aboutsummaryrefslogtreecommitdiffstats
path: root/library/intl/tests/Country/CountryRepositoryTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/intl/tests/Country/CountryRepositoryTest.php')
-rw-r--r--library/intl/tests/Country/CountryRepositoryTest.php114
1 files changed, 114 insertions, 0 deletions
diff --git a/library/intl/tests/Country/CountryRepositoryTest.php b/library/intl/tests/Country/CountryRepositoryTest.php
new file mode 100644
index 000000000..23e1509d8
--- /dev/null
+++ b/library/intl/tests/Country/CountryRepositoryTest.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace CommerceGuys\Intl\Tests\Country;
+
+use CommerceGuys\Intl\Country\CountryRepository;
+use org\bovigo\vfs\vfsStream;
+
+/**
+ * @coversDefaultClass \CommerceGuys\Intl\Country\CountryRepository
+ */
+class CountryRepositoryTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * Base country definitions.
+ *
+ * @var array
+ */
+ protected $baseDefinitions = array(
+ 'FR' => array(
+ 'code' => 'FR',
+ 'three_letter_code' => 'FRA',
+ 'numeric_code' => '250',
+ 'telephone_code' => '33',
+ ),
+ 'US' => array(
+ 'code' => 'US',
+ 'three_letter_code' => 'USA',
+ 'numeric_code' => '840',
+ 'telephone_code' => '1',
+ ),
+ );
+
+ /**
+ * English country definitions.
+ *
+ * @var array
+ */
+ protected $englishDefinitions = array(
+ 'FR' => array(
+ 'name' => 'France',
+ ),
+ 'US' => array(
+ 'name' => 'United States',
+ ),
+ );
+
+ /**
+ * @covers ::__construct
+ */
+ public function testConstructor()
+ {
+ // Mock the existence of JSON definitions on the filesystem.
+ $root = vfsStream::setup('resources');
+ vfsStream::newFile('country/base.json')->at($root)->setContent(json_encode($this->baseDefinitions));
+ vfsStream::newFile('country/en.json')->at($root)->setContent(json_encode($this->englishDefinitions));
+
+ // Instantiate the country repository and confirm that the definition path
+ // was properly set.
+ $countryRepository = new CountryRepository('vfs://resources/country/');
+ $definitionPath = $this->getObjectAttribute($countryRepository, 'definitionPath');
+ $this->assertEquals('vfs://resources/country/', $definitionPath);
+
+ return $countryRepository;
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @covers ::createCountryFromDefinition
+ * @uses \CommerceGuys\Intl\Country\Country
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGet($countryRepository)
+ {
+ $country = $countryRepository->get('FR');
+ $this->assertInstanceOf('CommerceGuys\\Intl\\Country\\Country', $country);
+ $this->assertEquals('FR', $country->getCountryCode());
+ $this->assertEquals('France', $country->getName());
+ $this->assertEquals('FRA', $country->getThreeLetterCode());
+ $this->assertEquals('250', $country->getNumericCode());
+ $this->assertEquals('33', $country->getTelephoneCode());
+ $this->assertEquals('en', $country->getLocale());
+ }
+
+ /**
+ * @covers ::get
+ * @covers ::loadDefinitions
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @expectedException \CommerceGuys\Intl\Exception\UnknownCountryException
+ * @depends testConstructor
+ */
+ public function testGetInvalidCountry($countryRepository)
+ {
+ $countryRepository->get('DE');
+ }
+
+ /**
+ * @covers ::getAll
+ * @covers ::loadDefinitions
+ * @covers ::createCountryFromDefinition
+ * @uses \CommerceGuys\Intl\Country\Country
+ * @uses \CommerceGuys\Intl\LocaleResolverTrait
+ * @depends testConstructor
+ */
+ public function testGetAll($countryRepository)
+ {
+ $countries = $countryRepository->getAll();
+ $this->assertArrayHasKey('FR', $countries);
+ $this->assertArrayHasKey('US', $countries);
+ $this->assertEquals('FR', $countries['FR']->getCountryCode());
+ $this->assertEquals('US', $countries['US']->getCountryCode());
+ }
+}