console verify App Privacy: real page text (category-only summary sections, ' | ' joined lines, Apple's commas); tracking label without 'data data'; Play Data safety page path confirmed
This commit is contained in:
parent
2b101f0fd8
commit
7e09947e62
5 changed files with 37 additions and 4 deletions
|
|
@ -63,7 +63,7 @@ describe('console plan: the JSON shape for every form', () => {
|
|||
expect(dev).toMatchObject({ label: 'Developer’s Advertising or Marketing', curlyQuotes: true, action: 'tick', status: 'certain', where: 'the "Device ID" dialog, step 1 (purposes)' });
|
||||
expect(p.answers.find(a => a.id === 'linked:Purchase History')).toMatchObject({ label: 'Yes, purchase history data collected from this app is linked to the user’s identity', action: 'pick' });
|
||||
expect(p.answers.find(a => a.id === 'tracking:Device ID')).toMatchObject({ label: 'Yes, we use device id data for tracking purposes' });
|
||||
expect(p.answers.find(a => a.id === 'tracking:Crash Data')).toMatchObject({ label: 'No, we do not use crash data data for tracking purposes' });
|
||||
expect(p.answers.find(a => a.id === 'tracking:Crash Data')).toMatchObject({ label: 'No, we do not use crash data for tracking purposes' });
|
||||
expect(p.answers.find(a => a.id === 'type:Purchase History')).toMatchObject({ label: 'Purchases', action: 'tick' });
|
||||
const ph = p.steps.filter(s => s.type === 'Purchase History');
|
||||
expect(ph.map(s => s.click ?? [])).toEqual([['Set Up Purchase History', 'Set Up Purchases'], ['Next'], ['Next'], ['Next', 'Next'], ['Save']]);
|
||||
|
|
@ -120,6 +120,31 @@ const SAMPLE = [
|
|||
'Diagnostics', 'Crash Data', '?', 'Used for App Functionality', 'Not linked to the user’s identity', 'Not used for tracking purposes', 'Edit',
|
||||
].join('\n');
|
||||
|
||||
/** Real App Privacy page text after publishing (a game, 2026-10-12): the summary sections list category names only; each
|
||||
* type's lines use Apple's comma style ("X, and Y"), the linked line has a straight apostrophe and is left out when
|
||||
* not linked; copied text may join a type's lines with " | ". */
|
||||
const REAL = [
|
||||
'Data Used to Track You', 'The following data may be used to track you across apps and websites owned by other companies:', 'Identifiers', 'Location',
|
||||
'Data Linked to You', 'Location', 'User Content', 'Identifiers', 'Data Not Linked to You', 'Identifiers',
|
||||
'Data Types', 'Edit',
|
||||
'Coarse Location', "Used for Analytics, App Functionality, and Third-Party Advertising | Linked to the user's identity | Used for tracking purposes",
|
||||
'Device ID', 'Used for Third-Party Advertising, and Analytics | Used for tracking purposes',
|
||||
'Advertising Data', 'Used for Third-Party Advertising | Used for tracking purposes',
|
||||
'Crash Data', "Used for Analytics | Linked to the user's identity",
|
||||
].join('\n');
|
||||
|
||||
describe('console verify: App Privacy from the real page text', () => {
|
||||
test('category names in the summary sections are not types; " | " lines, Apple\'s commas and straight quotes parse', () => {
|
||||
const m = parseAppPrivacy(REAL);
|
||||
expect([...m.keys()].sort()).toEqual(['Advertising Data', 'Coarse Location', 'Crash Data', 'Device ID']);
|
||||
const coarse = m.get('Coarse Location')!;
|
||||
expect([...coarse.purposes!].sort()).toEqual(['Analytics', 'App Functionality', 'Third-Party Advertising']);
|
||||
expect(coarse).toMatchObject({ setUp: false, linked: true, tracking: true, inferred: [] });
|
||||
expect(m.get('Device ID')).toMatchObject({ purposes: expect.arrayContaining(['Third-Party Advertising', 'Analytics']), linked: false, tracking: true, inferred: ['linked'] });
|
||||
expect(m.get('Crash Data')).toMatchObject({ purposes: ['Analytics'], linked: true, tracking: false, inferred: ['tracking'] });
|
||||
});
|
||||
});
|
||||
|
||||
describe('console verify: App Privacy from the page text', () => {
|
||||
test('parses the per-type summaries (curly quotes, the Purchases label, missing tracking line read as No)', () => {
|
||||
const m = parseAppPrivacy(SAMPLE);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue