Skip to content

Instantly share code, notes, and snippets.

@YonatanKra
YonatanKra / app.spec.ts
Created September 20, 2023 05:01
Tauri-demo: add login to authMock
class MockAuth extends HTMLElement {
constructor() {
super();
authComponent = this;
}
isLoggedIn?() {
return isLoggedIn;
}
@YonatanKra
YonatanKra / app.spec.ts
Created September 20, 2023 04:58
Tauri-demo: listen to login attempt event specification
it('should evoke the login function from Auth on `login-attempt` event', () => {
isLoggedIn = false;
app.connectedCallback();
const email = 'ff@gmail.com';
const password = '123456';
const loginComponent = app.shadowRoot?.querySelector('yag-login');
const spy = vi.spyOn(authComponent, 'login');
loginComponent!.dispatchEvent(new CustomEvent('login-attempt', {detail: {email, password}}));
expect(spy).toHaveBeenCalledWith(email, password);
});
@YonatanKra
YonatanKra / firebase.ts
Created September 17, 2023 17:08
Tauri-Demo: firebase SDK config
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "*****************************",
authDomain: "Your-Project-ID.firebaseapp.com",
projectId: "Your-Project-ID",
@YonatanKra
YonatanKra / app.ts
Created September 17, 2023 13:47
Tauri-demo: #setViewAccordingToUserStatus condition change
#setViewAccordingToUserStatus = () => {
if (!this.#authComponent!.isLoggedIn || this.#authComponent!.isLoggedIn?.() === false) {
this.shadowRoot!.innerHTML = `<yag-login></yag-login>`;
} else {
this.shadowRoot!.innerHTML = `<yag-greeter></yag-greeter>`;
}
}
@YonatanKra
YonatanKra / app.spec.ts
Created September 17, 2023 13:45
Tauri-demo: login edge case - auth component is not implemented
it('should display login screen if auth component is not initialized', () => {
isLoggedIn = true;
const originalIsLoggedIn = MockAuth.prototype.isLoggedIn;
MockAuth.prototype.isLoggedIn = undefined;
app.connectedCallback();
MockAuth.prototype.isLoggedIn = originalIsLoggedIn;
expect(getElementInView('yag-login')).toBeTruthy();
});
@YonatanKra
YonatanKra / index.ts
Created September 17, 2023 13:34
Tauri-demo: The login component
export * from './login';
@YonatanKra
YonatanKra / app.spec.ts
Last active September 17, 2023 09:05
Tauri-demo: Test remove listener in disconnectedCallback
it('should remove `user-status-change` listener to the old authComponent', () => {
const addEventListenerSpy = vi.spyOn(HTMLElement.prototype, 'addEventListener');
app.connectedCallback();
const oldAuthComponent = authComponent;
const removeEventListenerSpy = vi.spyOn(oldAuthComponent, 'removeEventListener');
app.disconnectedCallback();
app.connectedCallback();
expect(addEventListenerSpy).toHaveBeenCalledWith('user-status-change', expect.any(Function));
expect(removeEventListenerSpy).toHaveBeenCalledWith('user-status-change', expect.any(Function));
expect(removeEventListenerSpy.mock.calls[0][1]).toBe(addEventListenerSpy.mock.calls[0][1]);
@YonatanKra
YonatanKra / app.ts
Created September 17, 2023 05:16
Tauri-demo: extracted view logic
export class App extends HTMLElement{
#setViewAccordingToUserStatus = () => {
if (this.#authComponent!.isLoggedIn?.() === false) {
this.shadowRoot!.innerHTML = `<yag-login></yag-login>`;
} else {
this.shadowRoot!.innerHTML = `<yag-greeter></yag-greeter>`;
}
}
@YonatanKra
YonatanKra / app.spec.ts
Created September 17, 2023 05:10
Tauri-demo: show and hide login and greeter according to auth events
import { App } from './app';
customElements.define('yag-app', App);
class MockAuth extends HTMLElement {
constructor() {
super();
authComponent = this;
}
@YonatanKra
YonatanKra / app.spec.ts
Last active September 17, 2023 04:48
Taudi-demo: hide and show greeter according to logged in state
import { App } from './app';
customElements.define('yag-app', App);
class MockAuth extends HTMLElement {
constructor() {
super();
authComponent = this;
}