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

feat: Add payload checking #92

Merged
merged 1 commit into from
Dec 4, 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
83 changes: 83 additions & 0 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# SPDX-FileCopyrightText: Copyright 2024 Move Agency Group B.V., Zwolle, The Netherlands
# SPDX-License-Identifier: CC0-1.0

name: Integration Tests
SMillerDev marked this conversation as resolved.
Show resolved Hide resolved
on: [push, pull_request]

jobs:
phpunit:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
name: "PHP-${{ matrix.php-versions }}: Integration"
strategy:
matrix:
php-versions: ['8.3']
experimental: [false]
include:
- php-versions: 8.4
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: uopz
tools: phpunit:9.5.x

- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

- name: Install dependencies
run: composer update

- name: Install JSONSchema
run: pipx install check-jsonschema

- name: Check payload
run: |
for type in "message"; do
echo "Generate:"
php ./get_payload.php "$type" | tee "payload.$type.json"

echo "\nValidate:"
check-jsonschema --schemafile "doc/schemas/$type.schema.json" "payload.$type.json"
SMillerDev marked this conversation as resolved.
Show resolved Hide resolved
done

sample_push:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
name: "PHP-${{ matrix.php-versions }}: Sample"
strategy:
matrix:
php-versions: ['8.1', '8.2', '8.3']
experimental: [false]
include:
- php-versions: 8.4
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
coverage: none
extensions: uopz

- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

- name: Install dependencies
run: composer update

- name: Setup fake certificates
run: |
touch entrust_root_certification_authority.pem
touch server_certificates_bundle_sandbox.pem

- name: Run sample
run: php sample_push.php | grep "Trying to initialize HTTP/2 backend"
36 changes: 0 additions & 36 deletions .github/workflows/php-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,42 +56,6 @@ jobs:
- name: Run PHPUnit
run: phpunit -c phpunit.xml

sample_push:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
name: "PHP-${{ matrix.php-versions }}: Sample"
strategy:
matrix:
php-versions: ['8.1', '8.2', '8.3']
experimental: [false]
include:
- php-versions: 8.4
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
coverage: none
extensions: uopz

- name: Setup problem matchers for PHP
run: echo "::add-matcher::${{ runner.tool_cache }}/php.json"

- name: Install dependencies
run: composer update

- name: Setup fake certificates
run: |
touch entrust_root_certification_authority.pem
touch server_certificates_bundle_sandbox.pem

- name: Run sample
run: php sample_push.php | grep "Trying to initialize HTTP/2 backend"

phpcs:
runs-on: ubuntu-latest
continue-on-error: false
Expand Down
4 changes: 4 additions & 0 deletions .reuse/dep5
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ Copyright: 2015 Luca Bruno ([email protected])
2021 M2mobi B.V., Amsterdam, The Netherlands
2022 Move Agency Group B.V., Zwolle, The Netherlands
License: CC0-1.0

Files: doc/schemas/*.json
Copyright: 2024 Move Agency Group B.V., Zwolle, The Netherlands
License: CC0-1.0
53 changes: 53 additions & 0 deletions doc/schemas/message.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "APNS Push Message",
"description": "A Push message for APNS",
"type": "object",
"properties": {
SMillerDev marked this conversation as resolved.
Show resolved Hide resolved
"aps": {
"type": "object",
"additionalProperties": false,
"properties": {
"alert": {
"anyOf": [
{
"type": "object",
"additionalProperties": false,
"properties": {
"title": {
"type": "string"
},
"body": {
"type": "string"
}
}
},
{
"type": "string"
}
]
},
"badge": {
"type": "number"
},
"sound": {
"type": "string"
},
"content-available": {
"type": "number"
},
"mutable-content": {
"type": "number"
},
"category": {
"type": "string"
},
"thread-id": {
"type": "string"
}
},
"required": ["alert"]
}
},
"required": ["aps"]
}
44 changes: 44 additions & 0 deletions get_payload.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

/**
* Get the payload
*
* phpcs:disable PSR1.Files.SideEffects.FoundWithSymbols, PSR1.Classes.ClassDeclaration.MissingNamespace
*
* SPDX-FileCopyrightText: Copyright 2024 Move Agency Group B.V., Zwolle, The Netherlands
* SPDX-License-Identifier: BSD-3-Clause
*/

// Using Composer autoload all classes are loaded on-demand
require_once 'vendor/autoload.php';

$type = $argv[1] ?? 'message';

// Instantiate a new Message with a single recipient
$message = match ($type) {
'message' => new \ApnsPHP\Message(),
};

// Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
// over a ApnsPHP_Message object retrieved with the getErrors() message.
$message->setCustomIdentifier('7530A828-E58E-433E-A38F-D8042208CF96');

// Set badge icon to "3"
$message->setBadge(3);

// Set a simple welcome text
$message->setText('Hello APNs-enabled device!');

// Play the default sound
$message->setSound();

// Set a custom property
$message->setCustomProperty('acme2', ['bang', 'whiz']);

// Set another custom property
$message->setCustomProperty('acme3', ['bing', 'bong']);

// Set the expiry value to 30 seconds
$message->setExpiry(30);

echo $message->getPayload();
Loading