Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apns: Use upstream enum for priority #12

Merged
merged 1 commit into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"license": "MIT",
"require": {
"psr/log": ">=1.1",
"m2mobi/apns-php": "~3.0",
"m2mobi/apns-php": "dev-master",
"phpmailer/phpmailer": "~6.4",
"rmccue/requests": "~2.0",
"php": ">=8.1",
Expand Down
4 changes: 2 additions & 2 deletions decomposer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
},
"ApnsPHP": {
"url": "https://github.com/move-backend/apnsphp.git",
"version": "3.0.3",
"revision": "release/3.0.x",
"version": "4.0.0",
"revision": "master",
"psr0": {
"path": "/"
}
Expand Down
15 changes: 5 additions & 10 deletions src/Lunr/Vortex/APNS/APNSPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

namespace Lunr\Vortex\APNS;

use ApnsPHP\Message\Priority;
use Lunr\Vortex\PushNotificationPayloadInterface;
use ReflectionClass;

/**
* Apple Push Notification Service Payload Generator.
Expand All @@ -32,7 +32,7 @@ public function __construct()
{
$this->elements = [];

$this->elements['priority'] = APNSPriority::HIGH;
$this->elements['priority'] = Priority::Immediately;
}

/**
Expand Down Expand Up @@ -99,18 +99,13 @@ public function set_topic(string $topic): self
/**
* Mark the notification priority.
*
* @param int $priority Notification priority value.
* @param Priority $priority Notification priority value.
*
* @return APNSPayload Self Reference
*/
public function set_priority(int $priority): self
public function set_priority(Priority $priority): self
{
$priority_class = new ReflectionClass('\Lunr\Vortex\APNS\APNSPriority');

if (in_array($priority, array_values($priority_class->getConstants())))
{
$this->elements['priority'] = $priority;
}
$this->elements['priority'] = $priority;

return $this;
}
Expand Down
33 changes: 0 additions & 33 deletions src/Lunr/Vortex/APNS/APNSPriority.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

use ApnsPHP\Exception as ApnsPHPException;
use ApnsPHP\Message\Exception as MessageException;
use ApnsPHP\Message\Priority;
use ApnsPHP\Push\Exception as PushException;
use Lunr\Vortex\Email\EmailPayload;
use Lunr\Vortex\FCM\FCMPayload;
Expand Down Expand Up @@ -124,7 +125,7 @@ public function testPushConstructsCorrectPayload(): void
'mutable_content' => TRUE,
'content_available' => TRUE,
'topic' => 'com.company.app',
'priority' => 5,
'priority' => Priority::ConsiderPowerUsage,
'collapse_key' => 'key',
'identifier' => 'identifier',
'yo' => 'he',
Expand Down
23 changes: 5 additions & 18 deletions src/Lunr/Vortex/APNS/Tests/APNSPayloadSetTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

namespace Lunr\Vortex\APNS\Tests;

use ApnsPHP\Message\Priority;

/**
* This class contains tests for the setters of the APNSPayload class.
*
Expand Down Expand Up @@ -311,27 +313,12 @@ public function testSetTopicReturnsSelfReference(): void
*/
public function testPriority(): void
{
$this->class->set_priority(5);

$value = $this->get_reflection_property_value('elements');

$this->assertArrayHasKey('priority', $value);
$this->assertEquals(5, $value['priority']);
}

/**
* Test set_priority() works correctly.
*
* @covers \Lunr\Vortex\APNS\APNSPayload::set_priority
*/
public function testPriorityIgnoresWrongValues(): void
{
$this->class->set_priority(7);
$this->class->set_priority(Priority::ConsiderPowerUsage);

$value = $this->get_reflection_property_value('elements');

$this->assertArrayHasKey('priority', $value);
$this->assertEquals(10, $value['priority']);
$this->assertEquals(Priority::ConsiderPowerUsage, $value['priority']);
}

/**
Expand All @@ -341,7 +328,7 @@ public function testPriorityIgnoresWrongValues(): void
*/
public function testSetPriorityReturnsSelfReference(): void
{
$this->assertSame($this->class, $this->class->set_priority(5));
$this->assertSame($this->class, $this->class->set_priority(Priority::ConsiderPowerUsage));
}

/**
Expand Down
12 changes: 3 additions & 9 deletions src/Lunr/Vortex/FCM/FCMApnsPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@

namespace Lunr\Vortex\FCM;

use Lunr\Vortex\APNS\APNSPriority;
use ReflectionClass;

/**
* Firebase Cloud Messaging Push Notification APNS Payload Generator.
*
Expand Down Expand Up @@ -114,13 +111,10 @@ public function set_mutable_content(bool $mutable): static
*/
public function set_priority(string $priority): static
{
$priority = strtoupper($priority);

$priority_class = new ReflectionClass(APNSPriority::class);
$priorities = $priority_class->getConstants();
if (in_array($priority, array_keys($priorities)))
$value = FCMApnsPriority::tryFromString($priority);
if ($value !== NULL)
{
$this->elements['headers']['apns-priority'] = $priorities[$priority];
$this->elements['headers']['apns-priority'] = (string) $value->value;
}

return $this;
Expand Down
54 changes: 54 additions & 0 deletions src/Lunr/Vortex/FCM/FCMApnsPriority.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

/**
* This file contains priority types for Firebase Cloud Messaging Notifications to APNS.
*
* SPDX-FileCopyrightText: Copyright 2024 Move Agency Group B.V., Zwolle, The Netherlands
* SPDX-License-Identifier: MIT
*/

namespace Lunr\Vortex\FCM;

/**
* Firebase Cloud Messaging APNS Priority Types.
*/
enum FCMApnsPriority: int
{

/**
* Prioritize the devices power considerations over all other factors for delivery,
* and prevent awakening the device
*/
case Low = 1;

/**
* Send the notification based on power considerations on the users device
*/
case Default = 5;

/**
* Send the notification immediately
*/
case High = 10;

/**
* Get a case based on the string value.
*
* @param string $value The string representation of the case
*
* @return self|null
*/
public static function tryFromString(string $value): ?self
{
return match(strtolower($value))
{
'low' => self::Low,
'default' => self::Default,
'high' => self::High,
default => NULL,
};
}

}

?>
29 changes: 26 additions & 3 deletions src/Lunr/Vortex/FCM/Tests/FCMApnsPayloadSetTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,20 +98,43 @@ public function testSetMutableContentReturnsSelfReference(): void
$this->assertSame($this->class, $this->class->set_mutable_content(TRUE));
}

/**
* Provide different priority options for testing.
*
* @return array
*/
public function priorityProvider(): array
{
$return = [];

$return['lowercase'] = [ 'high', 10 ];
$return['titlecase'] = [ 'High', 10 ];
$return['uppercase'] = [ 'HIGH', 10 ];
$return['default'] = [ 'default', 5 ];
$return['low'] = [ 'low', 1 ];

return $return;
}

/**
* Test set_priority() works correctly.
*
* @dataProvider priorityProvider
*
* @param string $priority The priority to set
* @param int $expected The expected value
*
* @covers \Lunr\Vortex\FCM\FCMApnsPayload::set_priority
*/
public function testSetPriority(): void
public function testSetPriority(string $priority, int $expected): void
{
$this->class->set_priority('high');
$this->class->set_priority($priority);

$value = $this->get_reflection_property_value('elements');

$this->assertArrayHasKey('headers', $value);
$this->assertArrayHasKey('apns-priority', $value['headers']);
$this->assertEquals(10, $value['headers']['apns-priority']);
$this->assertEquals($expected, $value['headers']['apns-priority']);
}

/**
Expand Down
Loading