Skip to content

Commit

Permalink
scriptotek#16: refactor SMS add/unset, add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ctgraham committed Jul 27, 2020
1 parent efe54d6 commit 1222575
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 12 deletions.
24 changes: 24 additions & 0 deletions spec/Users/UserSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
12 changes: 12 additions & 0 deletions spec/data/user_response.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
},
Expand Down
50 changes: 38 additions & 12 deletions src/Users/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,37 +98,63 @@ 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)
{
$currentNumber = $this->getSmsNumber();
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
*
Expand Down

0 comments on commit 1222575

Please sign in to comment.