Session 13: The Slate, Africa geo-restriction, OAuth providers, PropRow + GameCard (1311 tests)

This commit is contained in:
Kev
2026-06-11 03:48:07 -04:00
parent d957dee17b
commit 10159209fa
18 changed files with 1452 additions and 64 deletions
+64
View File
@@ -0,0 +1,64 @@
// Session 13 — Africa geo-restriction set. The pricing component
// relies on isAfricanCountry() to gate the $4.99 tier. Tests pin
// the membership list so adding/removing a country is a visible,
// reviewed change rather than a silent edit.
const fs = require('fs');
const path = require('path');
const FILE = path.join(__dirname, '..', '..', 'web', 'src', 'lib', 'locales.ts');
const source = fs.readFileSync(FILE, 'utf8');
// Pull the AFRICAN_COUNTRIES set out of the TS source by regex. Tests
// the values, not the implementation — if the format changes, the
// failure is on the parse and tells us to update the test loader.
function parseAfricanCountries() {
const start = source.indexOf('AFRICAN_COUNTRIES');
if (start === -1) throw new Error('AFRICAN_COUNTRIES not found in locales.ts');
const slice = source.slice(start, start + 4000);
const codes = [...slice.matchAll(/'([A-Z]{2})'/g)].map((m) => m[1]);
return new Set(codes);
}
function reimplementIsAfrican(set) {
return (code) => {
if (!code) return false;
return set.has(String(code).toUpperCase());
};
}
describe('AFRICAN_COUNTRIES gate (Session 13)', () => {
const COUNTRIES = parseAfricanCountries();
const isAfricanCountry = reimplementIsAfrican(COUNTRIES);
test('covers all 54 sovereign African nations', () => {
expect(COUNTRIES.size).toBeGreaterThanOrEqual(50);
});
test('includes the major mobile-betting markets', () => {
const required = ['NG', 'KE', 'ZA', 'GH', 'TZ', 'UG', 'EG', 'MA'];
for (const code of required) expect(COUNTRIES.has(code)).toBe(true);
});
test('rejects non-African codes', () => {
const notAfrican = ['US', 'GB', 'CA', 'IN', 'BR', 'JP', 'DE', 'AU', 'CN', 'FR'];
for (const code of notAfrican) expect(COUNTRIES.has(code)).toBe(false);
});
test('isAfricanCountry — case-insensitive', () => {
expect(isAfricanCountry('ng')).toBe(true);
expect(isAfricanCountry('Ng')).toBe(true);
expect(isAfricanCountry('NG')).toBe(true);
});
test('isAfricanCountry — degrades closed on empty/null/undefined', () => {
expect(isAfricanCountry('')).toBe(false);
expect(isAfricanCountry(null)).toBe(false);
expect(isAfricanCountry(undefined)).toBe(false);
});
test('isAfricanCountry — degrades closed on unknown codes', () => {
expect(isAfricanCountry('ZZ')).toBe(false);
expect(isAfricanCountry('XX')).toBe(false);
});
});