@reown/appkit-scaffold-ui
Version:
The full stack toolkit to build onchain app UX.
68 lines • 3.65 kB
JavaScript
import { fixture } from '@open-wc/testing';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { html } from 'lit';
import { ChainController, ConnectorController, CoreHelperUtil, EventsController, OptionsController } from '@reown/appkit-controllers';
import { W3mFrameProvider } from '@reown/appkit-wallet';
import { W3mSocialLoginWidget } from '../../src/partials/w3m-social-login-widget';
import { HelpersUtil } from '../utils/HelpersUtil';
describe('W3mSocialLoginWidget', () => {
beforeEach(() => {
vi.useFakeTimers();
vi.clearAllMocks();
});
afterEach(() => {
vi.restoreAllMocks();
vi.useRealTimers();
});
it('should handle standard social login flow when clicking Google button', async () => {
const mockWindow = { location: { href: '' } };
const mockUri = 'https://auth.example.com/login';
vi.spyOn(OptionsController.state, 'remoteFeatures', 'get').mockReturnValue({
...OptionsController.state.remoteFeatures,
socials: ['google']
});
vi.spyOn(ChainController, 'setAccountProp');
vi.spyOn(EventsController, 'sendEvent');
vi.spyOn(CoreHelperUtil, 'returnOpenHref').mockReturnValue(mockWindow);
vi.spyOn(ChainController.state, 'activeChain', 'get').mockReturnValue('eip155');
vi.spyOn(ConnectorController, 'getAuthConnector').mockReturnValue({
provider: {
getSocialRedirectUri: vi.fn().mockResolvedValue({ uri: mockUri })
},
type: 'AUTH'
});
vi.spyOn(ChainController, 'setAccountProp');
const element = await fixture(html `<w3m-social-login-widget></w3m-social-login-widget>`);
const googleButton = HelpersUtil.getByTestId(element, 'social-selector-google');
await googleButton.click();
expect(CoreHelperUtil.returnOpenHref).toHaveBeenCalledWith('https://secure.walletconnect.org/loading', 'popupWindow', 'width=600,height=800,scrollbars=yes');
expect(ChainController.setAccountProp).toHaveBeenCalledWith('socialProvider', 'google', 'eip155');
expect(ChainController.setAccountProp).toHaveBeenCalledWith('socialWindow', mockWindow, 'eip155');
expect(mockWindow.location.href).toBe(mockUri);
});
it('should load auth frame in PWA environment and manage loading state', async () => {
const initDelay = 500;
const mockInit = vi.fn(() => new Promise(resolve => setTimeout(resolve, initDelay)));
const mockProvider = Object.create(W3mFrameProvider.prototype);
mockProvider.init = mockInit;
const mockAuthConnector = {
provider: mockProvider,
type: 'AUTH'
};
vi.spyOn(ConnectorController.state, 'connectors', 'get').mockReturnValue([mockAuthConnector]);
vi.spyOn(CoreHelperUtil, 'isPWA').mockReturnValue(true);
vi.spyOn(OptionsController.state, 'remoteFeatures', 'get').mockReturnValue({
...OptionsController.state.remoteFeatures,
socials: ['google']
});
const element = await fixture(html `<w3m-social-login-widget></w3m-social-login-widget>`);
await element.updateComplete;
expect(mockInit).toHaveBeenCalled();
const googleButton = HelpersUtil.getByTestId(element, 'social-selector-google');
expect(googleButton.hasAttribute('disabled')).toBe(true);
await vi.advanceTimersByTimeAsync(initDelay);
await element.updateComplete;
expect(googleButton.hasAttribute('disabled')).toBe(false);
});
});
//# sourceMappingURL=w3m-social-login-widget.test.js.map