Skip to content

Commit 89a7ed0

Browse files
committed
Update Digital Credentials WebDriver tests to use BiDi, add cleanup and complex data tests
1 parent 01e79a1 commit 89a7ed0

7 files changed

Lines changed: 81 additions & 129 deletions

File tree

digital-credentials/webdriver/create.https.html

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,44 @@
1111

1212
promise_test(async (t) => {
1313
const responseData = "test-create-response-data";
14-
await test_driver.set_virtual_wallet_response(responseData);
14+
await test_driver.set_virtual_wallet_behavior("respond", "openid4vci", { "value": responseData });
15+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
1516
await test_driver.bless("user activation");
1617

1718
const options = makeCreateOptions({ protocol: "openid4vci" });
1819
const result = await navigator.credentials.create(options);
1920

2021
assert_equals(result.protocol, "openid4vci");
21-
assert_equals(result.data, responseData);
22+
assert_equals(result.data.value, responseData);
2223
}, "navigator.credentials.create() with respond mode should resolve with the specified data.");
2324

2425
promise_test(async (t) => {
25-
await test_driver.set_virtual_wallet_to_decline();
26+
const complexData = { "a": 1, "b": [2, 3], "c": { "d": 4 } };
27+
await test_driver.set_virtual_wallet_behavior("respond", "openid4vci", complexData);
28+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
29+
await test_driver.bless("user activation");
30+
31+
const options = makeCreateOptions({ protocol: "openid4vci" });
32+
const result = await navigator.credentials.create(options);
33+
34+
assert_equals(result.protocol, "openid4vci");
35+
assert_equals(result.data.a, 1);
36+
assert_array_equals(result.data.b, [2, 3]);
37+
assert_equals(result.data.c.d, 4);
38+
}, "navigator.credentials.create() with complex data response should resolve with structured data.");
39+
40+
promise_test(async (t) => {
41+
await test_driver.set_virtual_wallet_behavior("decline");
42+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
2643
await test_driver.bless("user activation");
2744

2845
const options = makeCreateOptions({ protocol: "openid4vci" });
2946
await promise_rejects_dom(t, "NotAllowedError", navigator.credentials.create(options));
3047
}, "navigator.credentials.create() with decline mode should reject with NotAllowedError.");
3148

3249
promise_test(async (t) => {
33-
await test_driver.set_virtual_wallet_to_wait();
50+
await test_driver.set_virtual_wallet_behavior("wait");
51+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
3452
await test_driver.bless("user activation");
3553

3654
const controller = new AbortController();

digital-credentials/webdriver/get.https.html

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,44 @@
1111

1212
promise_test(async (t) => {
1313
const responseData = "test-response-data";
14-
await test_driver.set_virtual_wallet_response(responseData);
14+
await test_driver.set_virtual_wallet_behavior("respond", "openid4vp-v1-unsigned", { "value": responseData });
15+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
1516
await test_driver.bless("user activation");
1617

1718
const options = makeGetOptions({ protocol: "openid4vp-v1-unsigned" });
1819
const result = await navigator.credentials.get(options);
1920

2021
assert_equals(result.protocol, "openid4vp-v1-unsigned");
21-
assert_equals(result.data, responseData);
22+
assert_equals(result.data.value, responseData);
2223
}, "navigator.credentials.get() with respond mode should resolve with the specified data.");
2324

2425
promise_test(async (t) => {
25-
await test_driver.set_virtual_wallet_to_decline();
26+
const complexData = { "a": 1, "b": [2, 3], "c": { "d": 4 } };
27+
await test_driver.set_virtual_wallet_behavior("respond", "openid4vp-v1-unsigned", complexData);
28+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
29+
await test_driver.bless("user activation");
30+
31+
const options = makeGetOptions({ protocol: "openid4vp-v1-unsigned" });
32+
const result = await navigator.credentials.get(options);
33+
34+
assert_equals(result.protocol, "openid4vp-v1-unsigned");
35+
assert_equals(result.data.a, 1);
36+
assert_array_equals(result.data.b, [2, 3]);
37+
assert_equals(result.data.c.d, 4);
38+
}, "navigator.credentials.get() with complex data response should resolve with structured data.");
39+
40+
promise_test(async (t) => {
41+
await test_driver.set_virtual_wallet_behavior("decline");
42+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
2643
await test_driver.bless("user activation");
2744

2845
const options = makeGetOptions({ protocol: "openid4vp-v1-unsigned" });
2946
await promise_rejects_dom(t, "NotAllowedError", navigator.credentials.get(options));
3047
}, "navigator.credentials.get() with decline mode should reject with NotAllowedError.");
3148

3249
promise_test(async (t) => {
33-
await test_driver.set_virtual_wallet_to_wait();
50+
await test_driver.set_virtual_wallet_behavior("wait");
51+
t.add_cleanup(() => test_driver.set_virtual_wallet_behavior("clear"));
3452
await test_driver.bless("user activation");
3553

3654
const controller = new AbortController();

resources/testdriver.js

Lines changed: 12 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1986,59 +1986,22 @@
19861986
},
19871987

19881988
/**
1989-
* Sets the response for the next digital credentials request.
1989+
* Sets the behavior for the virtual wallet.
19901990
*
1991-
* Matches the `Set Wallet Response
1992-
* <https://github.com/w3c-fedid/digital-credentials/pull/381>`_
1993-
* WebDriver command.
1994-
*
1995-
* @param {String} data - The data to be returned by the wallet.
1996-
* @param {WindowProxy} context - Browsing context in which
1997-
* to run the call, or null for the current
1998-
* browsing context.
1999-
*
2000-
* @returns {Promise} Fulfilled after the response has been set,
2001-
* or rejected in case the WebDriver command errors.
2002-
*/
2003-
set_virtual_wallet_response: function(data, context=null) {
2004-
return window.test_driver_internal.set_virtual_wallet_response(data, context);
2005-
},
2006-
2007-
/**
2008-
* Sets the virtual wallet to wait indefinitely for the next digital credentials request.
1991+
* Matches the `Set Virtual Wallet Behavior`
1992+
* WebDriver BiDi command in Digital Credentials spec.
20091993
*
2010-
* Matches the `Set Wallet to Wait
2011-
* <https://github.com/w3c-fedid/digital-credentials/pull/381>`_
2012-
* WebDriver command.
2013-
*
2014-
* @param {WindowProxy} context - Browsing context in which
2015-
* to run the call, or null for the current
2016-
* browsing context.
1994+
* @param {String} action - The action to take ("decline", "respond", "wait", "clear").
1995+
* @param {String} [protocol=null] - The protocol requested (required for "respond").
1996+
* @param {Object} [response=null] - The response data (optional for "respond").
1997+
* @param {WindowProxy} [context=null] - Browsing context in which to run the call.
20171998
*
2018-
* @returns {Promise} Fulfilled after the wallet has been set to wait,
2019-
* or rejected in case the WebDriver command errors.
1999+
* @returns {Promise} Fulfilled after the behavior has been set.
20202000
*/
2021-
set_virtual_wallet_to_wait: function(context=null) {
2022-
return window.test_driver_internal.set_virtual_wallet_to_wait(context);
2001+
set_virtual_wallet_behavior: function(action, protocol=null, response=null, context=null) {
2002+
return window.test_driver_internal.set_virtual_wallet_behavior(action, protocol, response, context);
20232003
},
20242004

2025-
/**
2026-
* Sets the virtual wallet to decline the next digital credentials request.
2027-
*
2028-
* Matches the `Set Wallet to Decline
2029-
* <https://github.com/w3c-fedid/digital-credentials/pull/381>`_
2030-
* WebDriver command.
2031-
*
2032-
* @param {WindowProxy} context - Browsing context in which
2033-
* to run the call, or null for the current
2034-
* browsing context.
2035-
*
2036-
* @returns {Promise} Fulfilled after the wallet has been set to decline,
2037-
* or rejected in case the WebDriver command errors.
2038-
*/
2039-
set_virtual_wallet_to_decline: function(context=null) {
2040-
return window.test_driver_internal.set_virtual_wallet_to_decline(context);
2041-
},
20422005

20432006
/**
20442007
* Creates a virtual sensor for use with the Generic Sensors APIs.
@@ -2750,17 +2713,10 @@
27502713
throw new Error("reset_fedcm_cooldown() is not implemented by testdriver-vendor.js");
27512714
},
27522715

2753-
async set_virtual_wallet_response(data, context=null) {
2754-
throw new Error("set_virtual_wallet_response() is not implemented by testdriver-vendor.js");
2716+
async set_virtual_wallet_behavior(action, protocol=null, response=null, context=null) {
2717+
throw new Error("set_virtual_wallet_behavior() is not implemented by testdriver-vendor.js");
27552718
},
27562719

2757-
async set_virtual_wallet_to_wait(context=null) {
2758-
throw new Error("set_virtual_wallet_to_wait() is not implemented by testdriver-vendor.js");
2759-
},
2760-
2761-
async set_virtual_wallet_to_decline(context=null) {
2762-
throw new Error("set_virtual_wallet_to_decline() is not implemented by testdriver-vendor.js");
2763-
},
27642720

27652721
async create_virtual_sensor(sensor_type, sensor_params, context=null) {
27662722
throw new Error("create_virtual_sensor() is not implemented by testdriver-vendor.js");

tools/wptrunner/wptrunner/executors/actions.py

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -441,41 +441,19 @@ def __call__(self, payload):
441441
return self.protocol.fedcm.reset_fedcm_cooldown()
442442

443443

444-
class SetVirtualWalletResponseAction:
445-
name = "set_virtual_wallet_response"
444+
class SetVirtualWalletBehaviorAction:
445+
name = "set_virtual_wallet_behavior"
446446

447447
def __init__(self, logger, protocol):
448448
self.logger = logger
449449
self.protocol = protocol
450450

451451
def __call__(self, payload):
452-
data = payload["data"]
453-
self.logger.debug("Setting virtual wallet response to %s" % data)
454-
return self.protocol.digital_credentials.set_virtual_wallet_response(data)
455-
456-
457-
class SetVirtualWalletToWaitAction:
458-
name = "set_virtual_wallet_to_wait"
459-
460-
def __init__(self, logger, protocol):
461-
self.logger = logger
462-
self.protocol = protocol
463-
464-
def __call__(self, payload):
465-
self.logger.debug("Setting virtual wallet to wait")
466-
return self.protocol.digital_credentials.set_virtual_wallet_to_wait()
467-
468-
469-
class SetVirtualWalletToDeclineAction:
470-
name = "set_virtual_wallet_to_decline"
471-
472-
def __init__(self, logger, protocol):
473-
self.logger = logger
474-
self.protocol = protocol
475-
476-
def __call__(self, payload):
477-
self.logger.debug("Setting virtual wallet to decline")
478-
return self.protocol.digital_credentials.set_virtual_wallet_to_decline()
452+
action = payload["action"]
453+
protocol = payload.get("protocol")
454+
response = payload.get("response")
455+
self.logger.debug("Setting virtual wallet behavior to %s" % action)
456+
return self.protocol.digital_credentials.set_virtual_wallet_behavior(action, protocol, response)
479457

480458

481459
class CreateVirtualSensorAction:
@@ -690,9 +668,7 @@ def __call__(self, payload):
690668
GetFedCMDialogTypeAction,
691669
SetFedCMDelayEnabledAction,
692670
ResetFedCMCooldownAction,
693-
SetVirtualWalletResponseAction,
694-
SetVirtualWalletToWaitAction,
695-
SetVirtualWalletToDeclineAction,
671+
SetVirtualWalletBehaviorAction,
696672
CreateVirtualSensorAction,
697673
UpdateVirtualSensorAction,
698674
RemoveVirtualSensorAction,

tools/wptrunner/wptrunner/executors/executorwebdriver.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -933,15 +933,16 @@ class WebDriverDigitalCredentialsProtocolPart(DigitalCredentialsProtocolPart):
933933
def setup(self):
934934
self.webdriver = self.parent.webdriver
935935

936-
def set_virtual_wallet_response(self, data):
937-
body = {"data": data}
938-
return self.webdriver.send_session_command("POST", "digital-credentials/response", body)
939-
940-
def set_virtual_wallet_to_wait(self):
941-
return self.webdriver.send_session_command("POST", "digital-credentials/response_wait")
942-
943-
def set_virtual_wallet_to_decline(self):
944-
return self.webdriver.send_session_command("POST", "digital-credentials/response_decline")
936+
def set_virtual_wallet_behavior(self, action, protocol=None, response=None):
937+
params = {"action": action}
938+
if protocol is not None:
939+
params["protocol"] = protocol
940+
if response is not None:
941+
params["response"] = response
942+
943+
return self.parent.loop.run_until_complete(
944+
self.webdriver.bidi_session.send_command("digitalCredentials.setVirtualWalletBehavior", params)
945+
)
945946

946947

947948
class WebDriverDebugProtocolPart(DebugProtocolPart):

tools/wptrunner/wptrunner/executors/protocol.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,20 +1152,12 @@ class DigitalCredentialsProtocolPart(ProtocolPart):
11521152
name = "digital_credentials"
11531153

11541154
@abstractmethod
1155-
def set_virtual_wallet_response(self, data):
1156-
"""Set the virtual wallet response
1155+
def set_virtual_wallet_behavior(self, action, protocol=None, response=None):
1156+
"""Set the virtual wallet behavior
11571157
1158-
:param str data: The response data to set"""
1159-
pass
1160-
1161-
@abstractmethod
1162-
def set_virtual_wallet_to_wait(self):
1163-
"""Set the virtual wallet to wait indefinitely"""
1164-
pass
1165-
1166-
@abstractmethod
1167-
def set_virtual_wallet_to_decline(self):
1168-
"""Set the virtual wallet to decline"""
1158+
:param str action: The action to take ("decline", "respond", "wait", "clear")
1159+
:param str protocol: The protocol requested (required for "respond")
1160+
:param dict response: The response data (optional for "respond")"""
11691161
pass
11701162

11711163

tools/wptrunner/wptrunner/testdriver-extra.js

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -655,19 +655,10 @@
655655
return create_context_action("reset_fedcm_cooldown", context, {});
656656
};
657657

658-
window.test_driver_internal.set_virtual_wallet_response = function(data, context=null) {
659-
return create_context_action("set_virtual_wallet_response", context, {data});
658+
window.test_driver_internal.set_virtual_wallet_behavior = function(action, protocol=null, response=null, context=null) {
659+
return create_context_action("set_virtual_wallet_behavior", context, {action, protocol, response});
660660
};
661661

662-
window.test_driver_internal.set_virtual_wallet_to_wait = function(context=null) {
663-
return create_context_action("set_virtual_wallet_to_wait", context, {});
664-
};
665-
666-
window.test_driver_internal.set_virtual_wallet_to_decline = function(context=null) {
667-
return create_context_action("set_virtual_wallet_to_decline", context, {});
668-
};
669-
670-
671662
window.test_driver_internal.create_virtual_sensor = function(sensor_type, sensor_params={}, context=null) {
672663
return create_context_action("create_virtual_sensor", context, {sensor_type, sensor_params});
673664
};

0 commit comments

Comments
 (0)