Skip to content

Commit 2e6bf6b

Browse files
committed
refactor: simplify provider capability projection
1 parent 9146fb7 commit 2e6bf6b

2 files changed

Lines changed: 33 additions & 74 deletions

File tree

src/cli/connection/provider-policy.test.ts

Lines changed: 19 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,30 @@ import { test } from 'vitest';
33
import {
44
connectionProviderCapabilitiesForLease,
55
connectionProviderCapabilitiesForVerification,
6-
connectionProviderRequiresAppAttachment,
7-
connectionProviderSupportsArtifacts,
8-
connectionProviderSupportsDeferredAppSelection,
9-
connectionProviderSupportsDirectPortReverse,
10-
connectionProviderUsesCloudWebDriverLease,
116
} from './provider-policy.ts';
127

13-
test('only providers declaring deferred app selection use app catalog before allocation', () => {
14-
assert.equal(connectionProviderSupportsDeferredAppSelection('limrun'), true);
15-
assert.equal(connectionProviderSupportsDeferredAppSelection('browserstack'), false);
16-
assert.equal(connectionProviderSupportsDeferredAppSelection('aws-device-farm'), false);
17-
assert.equal(connectionProviderSupportsDeferredAppSelection('proxy'), false);
18-
assert.equal(connectionProviderSupportsDeferredAppSelection(undefined), false);
19-
});
20-
21-
test('provider capabilities stay declared outside command implementations', () => {
22-
assert.equal(connectionProviderRequiresAppAttachment('aws-device-farm'), true);
23-
assert.equal(connectionProviderRequiresAppAttachment('browserstack'), false);
24-
assert.equal(connectionProviderSupportsArtifacts('aws-device-farm'), true);
25-
assert.equal(connectionProviderSupportsArtifacts('browserstack'), true);
26-
assert.equal(connectionProviderSupportsArtifacts('limrun'), false);
27-
assert.equal(connectionProviderSupportsDirectPortReverse('limrun'), true);
28-
assert.equal(connectionProviderSupportsDirectPortReverse('aws-device-farm'), false);
29-
assert.equal(connectionProviderUsesCloudWebDriverLease('browserstack'), true);
30-
assert.equal(connectionProviderUsesCloudWebDriverLease('aws-device-farm'), true);
31-
assert.equal(connectionProviderUsesCloudWebDriverLease('limrun'), false);
32-
});
33-
34-
test('provider carriers resolve to semantic capabilities before commands inspect them', () => {
8+
test('provider carriers project provider identity into semantic capabilities', () => {
9+
assert.deepEqual(connectionProviderCapabilitiesForLease({ leaseProvider: 'limrun' }), {
10+
leaseKind: 'direct-device-provider',
11+
requiresAppAttachment: false,
12+
requiresRemoteDaemon: false,
13+
supportsArtifacts: false,
14+
supportsDeferredAppSelection: true,
15+
supportsDirectPortReverse: true,
16+
usesCloudWebDriverLease: false,
17+
});
18+
const browserStack = connectionProviderCapabilitiesForVerification({
19+
provider: 'browserstack',
20+
});
21+
assert.equal(browserStack.supportsArtifacts, true);
22+
assert.equal(browserStack.usesCloudWebDriverLease, true);
3523
assert.equal(
36-
connectionProviderCapabilitiesForLease({ leaseProvider: 'limrun' })
37-
.supportsDeferredAppSelection,
24+
connectionProviderCapabilitiesForLease({ leaseProvider: 'aws-device-farm' })
25+
.requiresAppAttachment,
3826
true,
3927
);
4028
assert.equal(
41-
connectionProviderCapabilitiesForVerification({ provider: 'browserstack' }).supportsArtifacts,
42-
true,
29+
connectionProviderCapabilitiesForLease({ leaseProvider: 'proxy' }).leaseKind,
30+
'proxy',
4331
);
4432
});

src/cli/connection/provider-policy.ts

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ type ConnectionProviderCapabilities = {
1717
usesCloudWebDriverLease: boolean;
1818
};
1919

20-
const DEFERRED_APP_SELECTION_PROVIDERS = new Set<DirectDeviceConnectProvider>(['limrun']);
21-
2220
export function isConnectProviderName(value: string | undefined): value is ConnectProvider {
2321
return value === 'cloud' || value === 'proxy' || isDirectDeviceConnectProvider(value);
2422
}
@@ -39,40 +37,6 @@ export function connectProviderNamesForError(): string {
3937
].join(', ');
4038
}
4139

42-
function connectionProviderRequiresRemoteDaemon(provider: string | undefined): boolean {
43-
return !isDirectDeviceConnectProvider(provider);
44-
}
45-
46-
export function connectionProviderSupportsDeferredAppSelection(
47-
provider: string | undefined,
48-
): boolean {
49-
return isDirectDeviceConnectProvider(provider) && DEFERRED_APP_SELECTION_PROVIDERS.has(provider);
50-
}
51-
52-
export function connectionProviderRequiresAppAttachment(provider: string | undefined): boolean {
53-
return provider === CLOUD_WEBDRIVER_PROVIDERS.awsDeviceFarm;
54-
}
55-
56-
export function connectionProviderSupportsArtifacts(provider: string | undefined): boolean {
57-
return isCloudWebDriverProviderName(provider);
58-
}
59-
60-
export function connectionProviderSupportsDirectPortReverse(provider: string | undefined): boolean {
61-
return provider === 'limrun';
62-
}
63-
64-
export function connectionProviderUsesCloudWebDriverLease(provider: string | undefined): boolean {
65-
return isCloudWebDriverProviderName(provider);
66-
}
67-
68-
function connectionProviderLeaseKind(
69-
provider: string | undefined,
70-
): 'proxy' | 'direct-device-provider' | 'remote-provider' {
71-
if (provider === 'proxy') return 'proxy';
72-
if (isDirectDeviceConnectProvider(provider)) return 'direct-device-provider';
73-
return 'remote-provider';
74-
}
75-
7640
export function connectionProviderCapabilitiesForLease(source: {
7741
leaseProvider?: string;
7842
}): ConnectionProviderCapabilities {
@@ -88,13 +52,20 @@ export function connectionProviderCapabilitiesForVerification(
8852
function connectionProviderCapabilities(
8953
provider: string | undefined,
9054
): ConnectionProviderCapabilities {
55+
const directDeviceProvider = isDirectDeviceConnectProvider(provider);
56+
const cloudWebDriver = isCloudWebDriverProviderName(provider);
9157
return {
92-
leaseKind: connectionProviderLeaseKind(provider),
93-
requiresAppAttachment: connectionProviderRequiresAppAttachment(provider),
94-
requiresRemoteDaemon: connectionProviderRequiresRemoteDaemon(provider),
95-
supportsArtifacts: connectionProviderSupportsArtifacts(provider),
96-
supportsDeferredAppSelection: connectionProviderSupportsDeferredAppSelection(provider),
97-
supportsDirectPortReverse: connectionProviderSupportsDirectPortReverse(provider),
98-
usesCloudWebDriverLease: connectionProviderUsesCloudWebDriverLease(provider),
58+
leaseKind:
59+
provider === 'proxy'
60+
? 'proxy'
61+
: directDeviceProvider
62+
? 'direct-device-provider'
63+
: 'remote-provider',
64+
requiresAppAttachment: provider === CLOUD_WEBDRIVER_PROVIDERS.awsDeviceFarm,
65+
requiresRemoteDaemon: !directDeviceProvider,
66+
supportsArtifacts: cloudWebDriver,
67+
supportsDeferredAppSelection: provider === 'limrun',
68+
supportsDirectPortReverse: provider === 'limrun',
69+
usesCloudWebDriverLease: cloudWebDriver,
9970
};
10071
}

0 commit comments

Comments
 (0)