3 namespace OpenEMR\Tests\Services
;
5 use PHPUnit\Framework\TestCase
;
6 use OpenEMR\Common\Uuid\UuidRegistry
;
7 use OpenEMR\Services\PatientService
;
8 use OpenEMR\Tests\Fixtures\FixtureManager
;
11 * Patient Service Tests
12 * @coversDefaultClass OpenEMR\Services\PatientService
14 * @link http://www.open-emr.org
15 * @author Dixon Whitmire <dixonwh@gmail.com>
16 * @copyright Copyright (c) 2020 Dixon Whitmire <dixonwh@gmail.com>
17 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
20 class PatientServiceTest
extends TestCase
25 private $patientService;
26 private $fixtureManager;
28 protected function setUp(): void
30 $this->patientService
= new PatientService();
31 $this->fixtureManager
= new FixtureManager();
32 $this->patientFixture
= (array) $this->fixtureManager
->getSinglePatientFixture();
35 protected function tearDown(): void
37 $this->fixtureManager
->removePatientFixtures();
41 * @covers ::getFreshPid
43 public function testGetFreshPid()
45 $actualValue = $this->patientService
->getFreshPid();
46 $this->assertGreaterThan(0, $actualValue);
50 * @covers ::insert when the data is invalid
52 public function testInsertFailure()
54 $this->patientFixture
["fname"] = "A";
55 $this->patientFixture
["DOB"] = "12/27/2017";
56 unset($this->patientFixture
["sex"]);
58 $actualResult = $this->patientService
->insert($this->patientFixture
);
60 $this->assertFalse($actualResult->isValid());
62 $this->assertArrayHasKey("fname", $actualResult->getValidationMessages());
63 $this->assertArrayHasKey("sex", $actualResult->getValidationMessages());
64 $this->assertArrayHasKey("DOB", $actualResult->getValidationMessages());
65 $this->assertEquals(3, count($actualResult->getValidationMessages()));
69 * @covers ::insert when the data is valid
71 public function testInsertSuccess()
73 $actualResult = $this->patientService
->insert($this->patientFixture
);
74 $this->assertTrue($actualResult->isValid());
75 $this->assertEquals(1, count($actualResult->getData()));
77 $dataResult = $actualResult->getData()[0];
78 $this->assertIsArray($dataResult);
79 $this->assertArrayHasKey("pid", $dataResult);
80 $this->assertGreaterThan(0, $dataResult["pid"]);
81 $this->assertArrayHasKey("uuid", $dataResult);
83 $this->assertEquals(0, count($actualResult->getValidationMessages()));
84 $this->assertTrue($actualResult->isValid());
85 $this->assertEquals(0, count($actualResult->getInternalErrors()));
86 $this->assertFalse($actualResult->hasInternalErrors());
90 * @covers ::update when the data is not valid
92 public function testUpdateFailure()
94 $this->patientService
->insert($this->patientFixture
);
96 $this->patientFixture
["fname"] = "A";
98 $actualResult = $this->patientService
->update("not-a-uuid", $this->patientFixture
);
100 $this->assertFalse($actualResult->isValid());
102 $this->assertArrayHasKey("fname", $actualResult->getValidationMessages());
103 $this->assertArrayHasKey("uuid", $actualResult->getValidationMessages());
104 $this->assertEquals(2, count($actualResult->getValidationMessages()));
108 * @covers ::update when the data is valid
110 public function testUpdateSuccess()
112 $actualResult = $this->patientService
->insert($this->patientFixture
);
113 $this->assertTrue($actualResult->isValid());
114 $this->assertEquals(1, count($actualResult->getData()));
116 $dataResult = $actualResult->getData()[0];
117 $this->assertIsArray($dataResult);
118 $this->assertArrayHasKey("pid", $dataResult);
119 $this->assertGreaterThan(0, $dataResult["pid"]);
120 $this->assertArrayHasKey("uuid", $dataResult);
122 $actualUuid = $dataResult["uuid"];
124 $this->patientFixture
["phone_home"] = "555-111-4444";
125 $this->patientService
->update($actualUuid, $this->patientFixture
);
127 $sql = "SELECT `uuid`, `phone_home` FROM `patient_data` WHERE `uuid` = ?";
128 $result = sqlQuery($sql, [UuidRegistry
::uuidToBytes($actualUuid)]);
129 $this->assertEquals($actualUuid, UuidRegistry
::uuidToString($result["uuid"]));
130 $this->assertEquals("555-111-4444", $result["phone_home"]);
137 public function testPatientQueries()
139 $this->fixtureManager
->installPatientFixtures();
141 $result = sqlQuery("SELECT `uuid` FROM `patient_data`");
142 $existingUuid = UuidRegistry
::uuidToString($result['uuid']);
145 $actualResult = $this->patientService
->getOne($existingUuid);
146 $resultData = $actualResult->getData()[0];
147 $this->assertNotNull($resultData);
148 $this->assertEquals($existingUuid, $resultData["uuid"]);
149 $this->assertArrayHasKey("fname", $resultData);
150 $this->assertArrayHasKey("lname", $resultData);
151 $this->assertArrayHasKey("sex", $resultData);
152 $this->assertArrayHasKey("DOB", $resultData);
153 $this->assertArrayHasKey("uuid", $resultData);
155 // getOne - validate uuid
156 $expectedUuid = $resultData["uuid"];
157 $actualResult = $this->patientService
->getOne($expectedUuid);
158 $resultData = $actualResult->getData()[0];
159 $this->assertNotNull($resultData);
160 $this->assertEquals($expectedUuid, $resultData["uuid"]);
162 // getOne - with an invalid uuid
163 $actualResult = $this->patientService
->getOne("not-a-uuid");
164 $this->assertEquals(1, count($actualResult->getValidationMessages()));
165 $this->assertEquals(0, count($actualResult->getInternalErrors()));
166 $this->assertEquals(0, count($actualResult->getData()));
169 $actualResult = $this->patientService
->getAll(array("postal_code" => "90210"));
170 $this->assertNotNull($actualResult);
171 $this->assertGreaterThan(1, count($actualResult->getData()));
173 foreach ($actualResult->getData() as $index => $patientRecord) {
174 $this->assertArrayHasKey("fname", $resultData);
175 $this->assertArrayHasKey("lname", $resultData);
176 $this->assertArrayHasKey("sex", $resultData);
177 $this->assertArrayHasKey("DOB", $resultData);
178 $this->assertArrayHasKey("uuid", $resultData);
179 $this->assertEquals("90210", $patientRecord["postal_code"]);