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

Feature/test cleanup #271

Merged
merged 4 commits into from
Jul 30, 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
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,30 @@ docker composer up -d ssp-hub.local
13. Hit `Apply` and `OK`
14. Click on `Run` and then `Debug 'Debug on Docker'`

### Metadata Tests Check:
- Metadata files can be linted via php (`php -l file`)
- Metadata files return arrays
- IdP Metadata files have an IdP namespace that exists, is a string, and only contains letters, numbers, hyphens, and underscores
- IdP Metadata files don't have duplicate IdP codes
- SP Metadata files don't have duplicate entity ids
- IdP Metadatas contains `name` entry with an `en` entry
- IdP Metadatas contains `logoURL` entry
- if SP Metadata contains `IDPList`, check that it is allowed for that IdP as well

#### Hub mode tests [SKIPPED if HUB_MODE = false]
- IdP Metadata files SP List is an array
- IdP Metadata files LogoCaption isset
- IdP Metadata files SP List has existing SPs
- All SPs have an IdP it can use
- All SPs have a non-empty IDPList entry
- All SPs have a non-empty name entry

#### SP tests [SKIPPED if `'SkipTests' => true,`]
- Contains a `CertData` entry
- Contains a `saml20.sign.response` entry AND it is set to true
- Contains a `saml20.sign.assertion` entry AND it is set to true
- Contains a `assertion.encryption` entry AND it is set to true

## Overriding translations / dictionaries

If you use this Docker image but want to change some of the translations, you
Expand Down
6 changes: 5 additions & 1 deletion tests/AnnouncementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ class AnnouncementTest extends TestCase
*/
public function testGetSimpleAnnouncement()
{
$results = AnnouncementUtils::getSimpleAnnouncement();
$announcementPathFile = '/data/ssp-announcement.php';
jason-jackson marked this conversation as resolved.
Show resolved Hide resolved
if (file_exists($announcementPathFile)) {
$results = AnnouncementUtils::getSimpleAnnouncement();
$this->assertNotNull($results);
}
}

}
40 changes: 19 additions & 21 deletions tests/MetadataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ public function testMetadataFilesReturnArrays()
$spFiles = $this->getSpMetadataFiles();
foreach ($spFiles as $file) {
$returnVal = include $file;
$this->assertTrue(is_array($returnVal), 'Metadata file does not return array as expected. File: ' . $file);
$this->assertIsArray($returnVal, 'Metadata file does not return array as expected. File: ' . $file);
}

$idpFiles = $this->getIdPMetadataFiles();
foreach ($idpFiles as $file) {
$returnVal = include $file;
$this->assertTrue(is_array($returnVal), 'Metadata file does not return array as expected. File: ' . $file);
$this->assertIsArray($returnVal, 'Metadata file does not return array as expected. File: ' . $file);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you look at the assertions for PHPUnit, you'll notice they are static. Have the same clean up mess in MailAdmin to deal with.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The assertion methods are declared static and can be invoked from any context using PHPUnit\Framework\Assert::assertTrue(), for instance, or using $this->assertTrue() or self::assertTrue(), for instance, in a class that extends PHPUnit\Framework\TestCase. You can even use global function wrappers such as assertTrue().

https://docs.phpunit.de/en/11.2/assertions.html#static-vs-non-static-usage-of-assertion-methods

We use class AnnouncementTest extends TestCase , so it is fine as it is.

}
}

Expand All @@ -74,7 +74,7 @@ public function testIDPRemoteMetadataIDPCode()
'include an ' . self::IdpCode . ' element as expected. IDP: ' . $entityId);

$nextCode = $entry[self::IdpCode];
$this->assertTrue(is_string($nextCode), 'Metadata entry has an ' .
$this->assertIsString($nextCode, 'Metadata entry has an ' .
self::IdpCode . 'element that is not a string. IDP: ' . $entityId);
$this->assertRegExp("/^[A-Za-z0-9_-]+$/", $nextCode, 'Metadata entry has an ' .
self::IdpCode . ' element that has something other than letters, ' .
Expand All @@ -101,7 +101,7 @@ public function testIDPRemoteMetadataBadSPList()
}
}

$this->assertTrue(empty($badIdps),
$this->assertEmpty($badIdps,
"At least one IdP has an " .
$spListKey . " entry that is not an array ... " . PHP_EOL .
var_export($badIdps, True));
Expand All @@ -125,7 +125,7 @@ public function testIDPRemoteMetadataMissingLogoCaption()
}
}

$this->assertTrue(empty($badIdps),
$this->assertEmpty($badIdps,
"At least one IdP is missing a " .
self::LogoCaptionKey . " entry ... " . PHP_EOL .
var_export($badIdps, True));
Expand Down Expand Up @@ -157,7 +157,7 @@ public function testIDPRemoteMetadataBadSPListEntry()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
"At least one non-existent SP is listed in an IdP's " .
$spListKey . " entry ... " . PHP_EOL .
var_export($badSps, True));
Expand All @@ -171,7 +171,7 @@ public function testIDPRemoteMetadataNoDuplicateIDPCode()

foreach ($idpEntries as $entityId => $entry) {
$nextCode = $entry[self::IdpCode];
$this->assertFalse(in_array($nextCode, $codes),
$this->assertNotContains($nextCode, $codes,
"Metadata has a duplicate " . self::IdpCode . " entry: " . $nextCode);
$codes[] = $nextCode;
}
Expand All @@ -184,8 +184,7 @@ public function testMetadataNoDuplicateEntities()
foreach ($spFiles as $file) {
$returnVal = include $file;
foreach ($returnVal as $entityId => $entity) {
$this->assertFalse(
in_array($entityId, $entities),
$this->assertNotContains($entityId, $entities,
'Duplicate entity id found in metadata file: ' . $file . '. Entity ID: ' . $entityId
);
$entities[] = $entityId;
Expand All @@ -196,8 +195,7 @@ public function testMetadataNoDuplicateEntities()
foreach ($idpFiles as $file) {
$returnVal = include $file;
foreach ($returnVal as $entityId => $entity) {
$this->assertFalse(
in_array($entityId, $entities),
$this->assertNotContains($entityId, $entities,
'Duplicate entity id found in metadata file: ' . $file . '. Entity ID: ' . $entityId
);
$entities[] = $entityId;
Expand Down Expand Up @@ -227,7 +225,7 @@ public function testMetadataNoSpsWithoutAnIdp()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
"At least one SP does not have an IdP it is allowed to use ... " .
var_export($badSps, True));
}
Expand All @@ -244,7 +242,7 @@ public function testMetadataBadIdpName()
}
}

$this->assertTrue(empty($badNames),
$this->assertEmpty($badNames,
"The following Idp's do not have a 'name' entry as an array with an 'en' entry ... " .
var_export($badNames, True));
}
Expand All @@ -261,7 +259,7 @@ public function testMetadataMissingLogoURL()
}
}

$this->assertTrue(empty($badLogos),
$this->assertEmpty($badLogos,
"The following Idp's do not have a 'logoURL' entry ... " .
var_export($badLogos, True));
}
Expand All @@ -288,7 +286,7 @@ public function testMetadataSPWithBadIDPList()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has an IDPList with a bad IDP entity id ... ' . var_export($badSps, True));

}
Expand All @@ -311,7 +309,7 @@ public function testMetadataSPWithNoIDPList()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has an empty IDPList entry (required) ... ' .
var_export($badSps, True));
}
Expand All @@ -334,7 +332,7 @@ public function testMetadataSPWithNoName()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has an empty "' . self::SPNameKey . '" entry (required) ... ' .
var_export($badSps, True));
}
Expand All @@ -356,7 +354,7 @@ public function testMetadataCerts()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has no certData entry ... ' .
var_export($badSps, True));

Expand All @@ -382,7 +380,7 @@ public function testMetadataSignResponse()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has saml20.sign.response set to false ... ' .
var_export($badSps, True));

Expand Down Expand Up @@ -412,7 +410,7 @@ public function testMetadataSignAssertion()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP has saml20.sign.assertion set to false ... ' .
var_export($badSps, True));

Expand Down Expand Up @@ -441,7 +439,7 @@ public function testMetadataEncryption()
}
}

$this->assertTrue(empty($badSps),
$this->assertEmpty($badSps,
'At least one SP does not have assertion.encryption set to True ... ' .
var_export($badSps, True));

Expand Down