Openemr fhir device, careplan, goal (#4422)
[openemr.git] / tests / Tests / Services / PatientServiceTest.php
blob0b2025ebcb5311023888e96ee19904cee4b6c09a
1 <?php
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;
10 /**
11 * Patient Service Tests
12 * @coversDefaultClass OpenEMR\Services\PatientService
13 * @package OpenEMR
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
22 /**
23 * @var PatientService
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();
40 /**
41 * @covers ::getFreshPid
43 public function testGetFreshPid()
45 $actualValue = $this->patientService->getFreshPid();
46 $this->assertGreaterThan(0, $actualValue);
49 /**
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()));
68 /**
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());
89 /**
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"]);
134 * @cover ::getOne
135 * @cover ::getAll
137 public function testPatientQueries()
139 $this->fixtureManager->installPatientFixtures();
141 $result = sqlQuery("SELECT `uuid` FROM `patient_data`");
142 $existingUuid = UuidRegistry::uuidToString($result['uuid']);
144 // getOne
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()));
168 // getAll
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"]);