. namespace core_sms; use ValueError; /** * Tests for SMS Messages. * * @package core_sms * @category test * @copyright 2024 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @covers \core_sms\message */ final class message_test extends \advanced_testcase { public function test_create(): void { $message = new message( recipientnumber: '1234567890', content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, ); $this->assertInstanceOf(message::class, $message); $this->assertFalse($message->is_sent()); } public function test_timecreated(): void { $clock = $this->mock_clock_with_incrementing(55555); $timecreated = 12345; $message = new message( recipientnumber: '1234567890', content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, timecreated: $timecreated, ); $this->assertEquals($timecreated, $message->timecreated); $starttime = $clock->now(); $message = new message( recipientnumber: '1234567890', content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, ); $this->assertGreaterThan($starttime->getTimestamp(), $message->timecreated); $this->assertLessThan($clock->now()->getTimestamp(), $message->timecreated); } public function test_id_not_updatable(): void { $message = new message( recipientnumber: '1234567890', content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, ); $this->assertFalse(isset($message->id)); $message = $message->with(id: 123); $this->assertEquals(123, $message->id); $this->expectException(\coding_exception::class); $message->with(id: 987); } public function test_get_region_invalid(): void { $message = new message( recipientnumber: '1234567890', content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, ); $this->expectException(ValueError::class); $message->get_region(); } /** * Test that get_region returns regions with valid numbers. * * @dataProvider get_region_provider * @param string $recipientnumber * @param string $expectedregion */ public function test_get_region_valid( string $recipientnumber, string $expectedregion, ): void { $message = new message( recipientnumber: $recipientnumber, content: 'Hello, world!', component: 'core', messagetype: 'test', recipientuserid: null, issensitive: false, ); $this->assertEquals($expectedregion, $message->get_region()); } /** * Data provider for test_get_region_valid. * * @return array */ public static function get_region_provider(): array { return [ // Authorised fictional numbers only. // Australia: https://www.acma.gov.au/phone-numbers-use-tv-shows-films-and-creative-works. ['+61491570006', 'AU'], // UK: https://www.ofcom.org.uk/phones-telecoms-and-internet/information-for-industry/numbering/numbers-for-drama. ['+447400123456', 'GB'], ]; } }