Skip to content

Commit 14841e4

Browse files
committed
Fix GitHub Actions tests by adding mock certificates and removing hardcoded sensitive data
1 parent cad52f3 commit 14841e4

File tree

2 files changed

+97
-8
lines changed

2 files changed

+97
-8
lines changed

tests/TestHelper.php

Lines changed: 90 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,109 @@ public static function getTestSignature()
1616

1717
/**
1818
* Get the path to the test public certificate
19+
* Creates a mock certificate if it doesn't exist
1920
*
2021
* @return string
2122
*/
2223
public static function getTestPublicKeyPath()
2324
{
24-
return __DIR__ . '/certs/public.cer';
25+
$certPath = __DIR__ . '/certs/public.cer';
26+
self::ensureTestCertificatesExist();
27+
return $certPath;
2528
}
2629

2730
/**
2831
* Get the path to the test private key
32+
* Creates a mock key if it doesn't exist
2933
*
3034
* @return string
3135
*/
3236
public static function getTestPrivateKeyPath()
3337
{
34-
return __DIR__ . '/certs/private.key';
38+
$keyPath = __DIR__ . '/certs/private.key';
39+
self::ensureTestCertificatesExist();
40+
return $keyPath;
41+
}
42+
43+
/**
44+
* Ensure test certificates exist, create them if they don't
45+
* This is particularly important for CI/CD environments
46+
*
47+
* @return void
48+
*/
49+
private static function ensureTestCertificatesExist()
50+
{
51+
$certsDir = __DIR__ . '/certs';
52+
$publicCert = $certsDir . '/public.cer';
53+
$privateKey = $certsDir . '/private.key';
54+
55+
// Create directory if it doesn't exist
56+
if (!is_dir($certsDir)) {
57+
mkdir($certsDir, 0755, true);
58+
}
59+
60+
// Create private key if it doesn't exist
61+
if (!file_exists($privateKey)) {
62+
// Create a mock private key for testing
63+
$privateKeyContent = <<<EOT
64+
-----BEGIN RSA PRIVATE KEY-----
65+
MIIEowIBAAKCAQEAvgm4DCU6BqKxmg0bWVsOLm+PAOAZyJGTnqmWPqYQHOiDCYBm
66+
FxHi7JdwW+09QmhU4yJFABP+CWnQPOkDu1J5YZyNLXXTKu3HxbGhpDmXgcTBgptz
67+
rJKTr1VjYGRJ0LL5/X/BcXCFa1CJXrOC4jLnMIGsNAGMCx9JgRyecggrG/FoELg7
68+
CQQM4X4vTYoKd3/QihP5MzQQCh/cNv/Z5zFvRuBGwJG1hI1CcGYFNAEUf0GCfxnk
69+
rONuzGF8FSKdkTrwLgVNE8YECpEDN1zRCDZ+/jLuQsJT1ER5Z//3ZgNuJiOTMZZL
70+
kKbjWT3oWLKdMPvONJxANpz1JLu0VvYQQTi5QwIDAQABAoIBAGmCVjvMQRX7nNcK
71+
fKCLnW33LzGvWTmdBQHEiF7nFJWOYdBvG7u6sTvMqxoHJUbPTacBQhJYtlQyj9FA
72+
XVyWyH1FrfQEEKFtGNoUDYcBZ+hJYLYDcJLQrSBBuuLCJ0RNZ5S8FU1+QgVLW/5Z
73+
rJUm8UPq5V9IWZKD0l8fUL5h6/l6qI7XIgGUTtR3nQRoIrBkjsTWOZFYjmJKGEQz
74+
DnxoYnZPOdQpI5OQlYKyVEW/QM8wBXN9Qoe7kqIq5K6JIFXoMNQoXG5R8oGzYBQl
75+
ZKYMkOOcJy4x1ZFQQsRQiYM/IqvK8gGnD9QYzSaxzj8YPQU7g9wEneQVgHdmp6Sm
76+
R9YG5YECgYEA+Qk6UEjdvmK8LLrMpYwFIWPKP/5GV9Qc+J89PN6t9LGg5ydXVyWK
77+
YKFYu2EMgzH98TdcVxhYYBTSBUEJQWXHYkxMsGpKcZgHLGvDSxRs2wuCKQZpAyoi
78+
CjLdlL/LJAQvnFkVCKgWZ5IqCUxeRHLlPRU5/XtLUPvPBZy0Ys0XP0MCgYEAw4OA
79+
OVKQcnwRvWnmB8yfgRSLRa+7dVnFc5VXW5SkOXXvVnNJXE/rQ18hF8jgS4lqwFpT
80+
QIXXRVIpXKxK6qNnNrCzVKzXgcR/ET2zCaX0jVyZaQ7Jth5ijCuKrNIUYyDyRlzb
81+
JY7+HdIRMuLLmGPTVjnANYqJEQEJcT+2/ZMsRiECgYEA8LsxNuGOGu4RWxMJH6WH
82+
chWKVpOQjHQYQOEbCJg0GCYx9DBaCMKQDpKV5fGpJxfHYGF+Qy9VWEGTr8TwUiQZ
83+
BDsC+oLqrH7IwgjFVxBwOYNS7xaQeKkzxFYoXRQxdz1XIJmzRXBh5F+WuaVNWFAJ
84+
WQp9FGldbFUloqXFAQnIXAMCgYBqIjKZVJwPJR3m/QUKKJnFGwhXLwWpvG1T9h9N
85+
QO9lq8kUXzJ7C2VDcRpvd8VkBmKrM5gJY9m/hPBvQ9wzF7zGvHuXgZQDQKYBzUVl
86+
FBVJDKRrGh4iK8V3ZrUDVVpzJRQCBBU7+mBR2gjyPNgfDxRAR0UzUVbZSRKj8JvL
87+
xNnbIQKBgHKvy7zyHqL0rG7yjawvVsRV9yqiQeX5dGYQTYnCUxvspGY0yfFgOGUh
88+
kFHKLbBkA0WnDG4l1ZqLDLEkU3lImFbZvl9KHnXQVW8jOTZHdVd3UJJJGIKYx4JQ
89+
QwgYZJOFrJwRYOKuaqLgSRbVTWVeVPZVGQzwQs+WGYCk6S0JJxZ4
90+
-----END RSA PRIVATE KEY-----
91+
EOT;
92+
file_put_contents($privateKey, $privateKeyContent);
93+
}
94+
95+
// Create public certificate if it doesn't exist
96+
if (!file_exists($publicCert)) {
97+
// Create a mock public certificate for testing
98+
$publicCertContent = <<<EOT
99+
-----BEGIN CERTIFICATE-----
100+
MIIDazCCAlOgAwIBAgIUEMGJYgOLmVGTLN+aHJvMvZdFXHUwDQYJKoZIhvcNAQEL
101+
BQAwRTELMAkGA1UEBhMCVVMxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
102+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMzA1MjYwMDAwMDBaFw0zMzA1
103+
MjMwMDAwMDBaMEUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
104+
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
105+
AQUAA4IBDwAwggEKAoIBAQC+CbgMJToGorGaDRtZWw4ub48A4BnIkZOeqZY+phAc
106+
6IMJgGYXEeLsl3Bb7T1CaFTjIkUAE/4JadA86QO7UnlhnI0tddMq7cfFsaGkOZeB
107+
xMGCm3OskpOvVWNgZEnQsvn9f8FxcIVrUIles4LiMucwgaw0AYwLH0mBHJ5yCCsb
108+
8WgQuDsJBAzhfi9Nigp3f9CKE/kzNBAKH9w2/9nnMW9G4EbAkbWEjUJwZgU0ARR/
109+
QYJ/GeSs427MYXwVIp2ROvAuBU0TxgQKkQM3XNEINn7+Mu5CwlPURHln//dmA24m
110+
I5MxlkuQpuNZPehYsp0w+840nEA2nPUku7RW9hBBOLlDAgMBAAGjUzBRMB0GA1Ud
111+
DgQWBBQMRl7RD5kBRQUKF7dKLb0QE5iiKzAfBgNVHSMEGDAWgBQMRl7RD5kBRQUK
112+
F7dKLb0QE5iiKzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQB+
113+
F/fqsWFrT+TTu1VTytW3IQYvV7UbQIcJ/dCJKzJYKGbGhV5LWJ4cM4iBZ9SSt2oc
114+
OEZQN4Hx1nKWlxGPFJUzUQYRVGGt2MpF8wzMe0STnqP1MmQnbVwXpJXHVT4m4wXF
115+
FdSGEpbFwSrBlzkWEHgQkZBkGeyOYQhTGQV0X0qOCPCj9CfM5JC/6VxQkKQhtZZd
116+
kBppVwYkLRZwHZ5KXXJmVgpCQ+JrNEEVUu3SoJJ7m5ZQe0QO9bGqnCl1gKZkKYGQ
117+
QhyG+cCMJ/RVA4FAiPHQVpL1L+J+skZZqXZHh+zfYPKgXs1+WCLdI+Qgz6l1vPQZ
118+
YrxZbQF4QkJXTDPOZDuY
119+
-----END CERTIFICATE-----
120+
EOT;
121+
file_put_contents($publicCert, $publicCertContent);
122+
}
35123
}
36124
}

tests/Unit/NetopiaPaymentHelperTest.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,27 @@
55
use Aflorea4\NetopiaPayments\Models\Invoice;
66
use Aflorea4\NetopiaPayments\Models\BillingAddress;
77
use Illuminate\Support\Facades\Config;
8+
use Tests\TestHelper;
89

910
beforeEach(function () {
1011
// Mock the Config facade to use our test certificates
1112
Config::shouldReceive('get')
1213
->with('netopia.signature')
13-
->andReturn('2VXM-Q4WB-F8UL-MRU6-PWP3');
14+
->andReturn(TestHelper::getTestSignature());
1415

1516
Config::shouldReceive('get')
1617
->with('netopia.public_key_path')
17-
->andReturn(__DIR__ . '/../certs/public.cer');
18+
->andReturn(TestHelper::getTestPublicKeyPath());
1819

1920
Config::shouldReceive('get')
2021
->with('netopia.private_key_path')
21-
->andReturn(__DIR__ . '/../certs/private.key');
22+
->andReturn(TestHelper::getTestPrivateKeyPath());
2223
});
2324

2425
it('can generate payment form data for a request', function () {
2526
// Create a test request
2627
$request = new Request();
27-
$request->signature = '2VXM-Q4WB-F8UL-MRU6-PWP3';
28+
$request->signature = TestHelper::getTestSignature();
2829
$request->orderId = 'TEST-' . time();
2930
$request->returnUrl = 'https://example.com/return';
3031
$request->confirmUrl = 'https://example.com/confirm';
@@ -51,8 +52,8 @@
5152
// Generate payment form data
5253
$paymentFormData = NetopiaPaymentHelper::generatePaymentFormData(
5354
$request,
54-
'2VXM-Q4WB-F8UL-MRU6-PWP3',
55-
__DIR__ . '/../certs/public.cer',
55+
TestHelper::getTestSignature(),
56+
TestHelper::getTestPublicKeyPath(),
5657
false // Use sandbox mode
5758
);
5859

0 commit comments

Comments
 (0)