From 1222575341d6afc775be173820524054c1690285 Mon Sep 17 00:00:00 2001 From: Clinton Graham Date: Mon, 27 Jul 2020 12:17:28 -0400 Subject: [PATCH] scriptotek/php-alma-client#16: refactor SMS add/unset, add tests --- spec/Users/UserSpec.php | 24 +++++++++++++++++ spec/data/user_response.json | 12 +++++++++ src/Users/User.php | 50 +++++++++++++++++++++++++++--------- 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/spec/Users/UserSpec.php b/spec/Users/UserSpec.php index 8331b79..8078286 100644 --- a/spec/Users/UserSpec.php +++ b/spec/Users/UserSpec.php @@ -71,4 +71,28 @@ public function it_has_requests() { $this->requests->shouldHaveType(Requests::class); } + + public function it_has_sms() + { + $this->getSmsNumber()->shouldBe('87654321'); + } + + public function it_can_change_sms() + { + $this->setSmsNumber('12345678')->shouldBeCalled(); + $this->getSmsNumber()->shouldBe('12345678'); + } + + public function it_can_add_sms() + { + $this->setSmsNumber('9999999')->shouldBeCalled(); + $this->getSmsNumber()->shouldBe('9999999'); + } + + public function it_can_remove_sms() + { + $this->unsetSmsNumber()->shouldBeCalled(); + $this->getSmsNumber()->shouldBe(null); + } + } diff --git a/spec/data/user_response.json b/spec/data/user_response.json index ed9204f..2bd7b1a 100644 --- a/spec/data/user_response.json +++ b/spec/data/user_response.json @@ -65,6 +65,18 @@ "preferred": true, "preferred_sms": false, "segment_type": "Internal" + }, + { + "phone_number": "87654321", + "phone_type": [ + { + "desc": "Mobile", + "value": "mobile" + } + ], + "preferred": false, + "preferred_sms": true, + "segment_type": "Internal" } ] }, diff --git a/src/Users/User.php b/src/Users/User.php index 2ae6f0e..37ab291 100644 --- a/src/Users/User.php +++ b/src/Users/User.php @@ -98,11 +98,27 @@ public function getSmsNumber() } } } - return; + return null; } - + /** - * Set the user's preferred SMS number, creating a new number if needed + * Remove the preferred SMS flag from any number. + */ + public function unsetSmsNumber() + { + $this->init(); + if ($this->data->contact_info->phone) { + foreach ($this->data->contact_info->phone as $phone) { + if ($phone->preferred_sms) { + $phone->preferred_sms = false; + } + } + } + } + + /** + * Set the user's preferred SMS number, creating a new internal mobile number if needed + * @param $number string The SMS-capable mobile phone number */ public function setSmsNumber($number) { @@ -110,25 +126,35 @@ public function setSmsNumber($number) if ($number === $currentNumber) { return; } + $this->unsetSmsNumber(); $updated = false; if ($this->data->contact_info->phone) { foreach ($this->data->contact_info->phone as $phone) { - if ($phone->preferred_sms) { - $phone->preferred_sms = false; - } else if ($phone->phone_number === $number) { + if ($phone->phone_number === $number) { $phone->preferred_sms = true; } } } if (!$updated) { - $phones = json_encode($this->data->contact_info->phone); - $phoneArray = json_decode($phones, true); - $phoneArray[] = json_decode('{"phone_number":"'.$number.'","preferred":false,"preferred_sms":true,"segment_type":"Internal","phone_type":[{"value":"mobile","desc":"Mobile"}]}', true); - $this->data->contact_info->phone = json_decode(json_encode($phoneArray)); + $this->addSmsNumber($number); } - return; } - + + /** + * Add the user's preferred SMS number as a new internal mobile number. + * @param $number string The SMS-capable mobile phone number + */ + public function addSmsNumber($number) + { + $currentNumber = $this->getSmsNumber(); + if ($currentNumber) { + $this->unsetSmsNumber(); + } + $phones = json_decode(json_encode($this->data->contact_info->phone), true); + $phones[] = json_decode('{"phone_number":'.json_encode($number).',"preferred":false,"preferred_sms":true,"segment_type":"Internal","phone_type":[{"value":"mobile","desc":"Mobile"}]}', true); + $this->data->contact_info->phone = json_decode(json_encode($phones)); + } + /** * Save the user *