Skip to content

Commit 6946c2f

Browse files
authored
fix: allow fresh session device binding (#677)
1 parent 491ad7e commit 6946c2f

10 files changed

Lines changed: 631 additions & 106 deletions

src/daemon/__tests__/request-lock-policy.test.ts

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,25 @@ const ANDROID_SESSION: SessionState = {
3232
},
3333
};
3434

35-
test('rejects fresh-session selector conflicts under request lock policy', () => {
36-
assert.throws(
37-
() =>
38-
applyRequestLockPolicy({
39-
token: 'token',
40-
session: 'qa-ios',
41-
command: 'snapshot',
42-
positionals: [],
43-
flags: {
44-
device: 'Pixel 9',
45-
},
46-
meta: {
47-
lockPolicy: 'reject',
48-
lockPlatform: 'ios',
49-
},
50-
}),
51-
/--device=Pixel 9/i,
52-
);
35+
test('allows compatible fresh-session selectors under request lock policy', () => {
36+
const req = applyRequestLockPolicy({
37+
token: 'token',
38+
session: 'qa-ios',
39+
command: 'snapshot',
40+
positionals: [],
41+
flags: {
42+
device: 'iPhone 16',
43+
udid: 'SIM-001',
44+
},
45+
meta: {
46+
lockPolicy: 'reject',
47+
lockPlatform: 'ios',
48+
},
49+
});
50+
51+
assert.equal(req.flags?.platform, 'ios');
52+
assert.equal(req.flags?.device, 'iPhone 16');
53+
assert.equal(req.flags?.udid, 'SIM-001');
5354
});
5455

5556
test('allows open to choose a fresh-session target under request lock policy', () => {
@@ -74,7 +75,7 @@ test('allows open to choose a fresh-session target under request lock policy', (
7475
assert.equal(req.flags?.udid, 'SIM-001');
7576
});
7677

77-
test('strips fresh-session selector conflicts and restores lock platform', () => {
78+
test('strips only fresh-session selector conflicts and restores lock platform', () => {
7879
const req = applyRequestLockPolicy({
7980
token: 'token',
8081
session: 'qa-ios',
@@ -92,10 +93,32 @@ test('strips fresh-session selector conflicts and restores lock platform', () =>
9293
});
9394

9495
assert.equal(req.flags?.platform, 'ios');
95-
assert.equal(req.flags?.target, undefined);
96+
assert.equal(req.flags?.target, 'tv');
9697
assert.equal(req.flags?.serial, undefined);
9798
});
9899

100+
test('strips iOS selectors while preserving compatible macOS platform under Apple lock', () => {
101+
const req = applyRequestLockPolicy({
102+
token: 'token',
103+
session: 'qa-macos',
104+
command: 'snapshot',
105+
positionals: [],
106+
flags: {
107+
platform: 'macos',
108+
udid: 'SIM-001',
109+
iosSimulatorDeviceSet: '/tmp/tenant-a/set',
110+
},
111+
meta: {
112+
lockPolicy: 'strip',
113+
lockPlatform: 'apple',
114+
},
115+
});
116+
117+
assert.equal(req.flags?.platform, 'macos');
118+
assert.equal(req.flags?.udid, undefined);
119+
assert.equal(req.flags?.iosSimulatorDeviceSet, undefined);
120+
});
121+
99122
test('rejects existing-session selector conflicts under request lock policy', () => {
100123
assert.throws(
101124
() =>

0 commit comments

Comments
 (0)