Add HeroSMS free phone reuse
This commit is contained in:
@@ -108,6 +108,18 @@ test('sidepanel html exposes phone verification toggle and multi-provider SMS ro
|
||||
assert.match(html, /id="row-hero-sms-current-code"/);
|
||||
assert.match(html, /id="row-hero-sms-preferred-activation"/);
|
||||
assert.match(html, /id="select-hero-sms-preferred-activation"/);
|
||||
assert.match(html, /id="row-free-phone-reuse-enabled"/);
|
||||
assert.match(html, /id="input-free-phone-reuse-enabled"/);
|
||||
assert.match(html, /id="row-free-phone-reuse-auto-enabled"/);
|
||||
assert.match(html, /id="input-free-phone-reuse-auto-enabled"/);
|
||||
assert.match(html, /id="row-free-reusable-phone"/);
|
||||
assert.match(html, /id="display-free-reusable-phone"/);
|
||||
assert.match(html, /id="display-free-reusable-phone-country"/);
|
||||
assert.match(html, /id="input-free-reusable-phone"/);
|
||||
assert.match(html, /id="btn-save-free-reusable-phone"/);
|
||||
assert.match(html, /id="btn-clear-free-reusable-phone"/);
|
||||
assert.match(html, /白嫖复用/);
|
||||
assert.match(html, /自动白嫖复用/);
|
||||
assert.match(html, /id="row-phone-replacement-limit"/);
|
||||
assert.match(html, /id="row-phone-verification-resend-count"/);
|
||||
assert.match(html, /id="row-phone-code-wait-seconds"/);
|
||||
@@ -134,6 +146,49 @@ test('sidepanel html exposes phone verification toggle and multi-provider SMS ro
|
||||
assert.doesNotMatch(html, /id="input-account-run-history-text-enabled"/);
|
||||
});
|
||||
|
||||
test('sidepanel source wires free reusable phone save and clear actions to runtime messages', () => {
|
||||
assert.match(sidepanelSource, /const inputFreePhoneReuseEnabled = document\.getElementById\('input-free-phone-reuse-enabled'\);/);
|
||||
assert.match(sidepanelSource, /const inputFreePhoneReuseAutoEnabled = document\.getElementById\('input-free-phone-reuse-auto-enabled'\);/);
|
||||
assert.match(sidepanelSource, /const displayFreeReusablePhone = document\.getElementById\('display-free-reusable-phone'\);/);
|
||||
assert.match(sidepanelSource, /const inputFreeReusablePhone = document\.getElementById\('input-free-reusable-phone'\);/);
|
||||
assert.match(sidepanelSource, /const btnSaveFreeReusablePhone = document\.getElementById\('btn-save-free-reusable-phone'\);/);
|
||||
assert.match(sidepanelSource, /const btnClearFreeReusablePhone = document\.getElementById\('btn-clear-free-reusable-phone'\);/);
|
||||
assert.match(sidepanelSource, /type:\s*'SET_FREE_REUSABLE_PHONE'/);
|
||||
assert.match(sidepanelSource, /payload:\s*\{\s*phoneNumber\s*\}/s);
|
||||
assert.match(sidepanelSource, /type:\s*'CLEAR_FREE_REUSABLE_PHONE'/);
|
||||
});
|
||||
|
||||
test('sidepanel keeps free reuse switches realtime and locks them during auto run', () => {
|
||||
assert.match(
|
||||
sidepanelSource,
|
||||
/message\.payload\.freePhoneReuseEnabled !== undefined[\s\S]*updatePhoneVerificationSettingsUI\(\);/
|
||||
);
|
||||
assert.match(
|
||||
sidepanelSource,
|
||||
/message\.payload\.freePhoneReuseAutoEnabled !== undefined[\s\S]*updatePhoneVerificationSettingsUI\(\);/
|
||||
);
|
||||
assert.match(sidepanelSource, /setFreePhoneReuseControlsLocked\(settingsCardLocked\);/);
|
||||
assert.match(
|
||||
sidepanelSource,
|
||||
/inputFreePhoneReuseEnabled\.disabled = locked;[\s\S]*inputFreePhoneReuseAutoEnabled\.disabled = locked/
|
||||
);
|
||||
});
|
||||
|
||||
test('sidepanel free reusable phone paths avoid stale identifiers and empty-save errors', () => {
|
||||
assert.doesNotMatch(
|
||||
sidepanelSource,
|
||||
/applyHeroSmsFallbackSelection\(\s*\[\.\.\.nextPrimaryCountries,\s*\.\.\.nextFallback\]/
|
||||
);
|
||||
assert.match(
|
||||
sidepanelSource,
|
||||
/applyHeroSmsFallbackSelection\(\s*\[\s*nextPrimary,\s*\.\.\.nextFallback\]/
|
||||
);
|
||||
assert.match(
|
||||
sidepanelSource,
|
||||
/if \(!phoneNumber\) \{[\s\S]*请先填写白嫖复用手机号[\s\S]*return;[\s\S]*chrome\.runtime\.sendMessage\(\{\s*type:\s*'SET_FREE_REUSABLE_PHONE'/
|
||||
);
|
||||
});
|
||||
|
||||
test('sidepanel source wires runtime signup phone field to background sync messages', () => {
|
||||
assert.match(sidepanelSource, /function getRuntimeSignupPhoneValue\(state = latestState\)/);
|
||||
assert.match(sidepanelSource, /function shouldExecuteStep3WithSignupPhoneIdentity\(state = latestState\)/);
|
||||
@@ -494,6 +549,9 @@ function updateSignupMethodUI() {
|
||||
function syncSignupPhoneInputFromState() {
|
||||
rowSignupPhone.style.display = inputPhoneVerificationEnabled.checked && latestState.signupPhoneNumber ? '' : 'none';
|
||||
}
|
||||
function setFreePhoneReuseControlsLocked() {}
|
||||
function isAutoRunLockedPhase() { return false; }
|
||||
function isAutoRunScheduledPhase() { return false; }
|
||||
|
||||
${extractFunction('updatePhoneVerificationSettingsUI')}
|
||||
|
||||
@@ -686,6 +744,8 @@ const inputAutoDelayEnabled = { checked: false };
|
||||
const inputAutoDelayMinutes = { value: '30' };
|
||||
const inputAutoStepDelaySeconds = { value: '' };
|
||||
const inputPhoneVerificationEnabled = { checked: true };
|
||||
const inputFreePhoneReuseEnabled = { checked: true };
|
||||
const inputFreePhoneReuseAutoEnabled = { checked: true };
|
||||
const selectPhoneSmsProvider = { value: 'hero-sms' };
|
||||
const inputVerificationResendCount = { value: '4' };
|
||||
const inputHeroSmsApiKey = { value: 'demo-key' };
|
||||
@@ -832,6 +892,8 @@ return { collectSettingsPayload };
|
||||
assert.deepStrictEqual(payload.nexSmsCountryOrder, [1]);
|
||||
assert.equal(payload.nexSmsServiceCode, 'ot');
|
||||
assert.equal(payload.heroSmsReuseEnabled, true);
|
||||
assert.equal(payload.freePhoneReuseEnabled, true);
|
||||
assert.equal(payload.freePhoneReuseAutoEnabled, true);
|
||||
assert.equal(payload.heroSmsAcquirePriority, 'price');
|
||||
assert.equal(payload.heroSmsMaxPrice, '0.12');
|
||||
assert.equal(payload.heroSmsPreferredPrice, '0.0512');
|
||||
|
||||
Reference in New Issue
Block a user