/// <reference types="Cypress" />

context('Local Storage', () => {
  beforeEach(() => {
    cy.visit('https://example.cypress.io/commands/local-storage');
  });
  // Although local storage is automatically cleared
  // in between tests to maintain a clean state
  // sometimes we need to clear the local storage manually

  it('cy.clearLocalStorage() - clear all data in local storage', () => {
    // https://on.cypress.io/clearlocalstorage
    cy.get('.ls-btn')
      .click()
      .should(() => {
        expect(localStorage.getItem('prop1')).to.eq('red');
        expect(localStorage.getItem('prop2')).to.eq('blue');
        expect(localStorage.getItem('prop3')).to.eq('magenta');
      });

    // clearLocalStorage() yields the localStorage object
    cy.clearLocalStorage().should(ls => {
      expect(ls.getItem('prop1')).to.be.null;
      expect(ls.getItem('prop2')).to.be.null;
      expect(ls.getItem('prop3')).to.be.null;
    });

    // Clear key matching string in Local Storage
    cy.get('.ls-btn')
      .click()
      .should(() => {
        expect(localStorage.getItem('prop1')).to.eq('red');
        expect(localStorage.getItem('prop2')).to.eq('blue');
        expect(localStorage.getItem('prop3')).to.eq('magenta');
      });

    cy.clearLocalStorage('prop1').should(ls => {
      expect(ls.getItem('prop1')).to.be.null;
      expect(ls.getItem('prop2')).to.eq('blue');
      expect(ls.getItem('prop3')).to.eq('magenta');
    });

    // Clear keys matching regex in Local Storage
    cy.get('.ls-btn')
      .click()
      .should(() => {
        expect(localStorage.getItem('prop1')).to.eq('red');
        expect(localStorage.getItem('prop2')).to.eq('blue');
        expect(localStorage.getItem('prop3')).to.eq('magenta');
      });

    cy.clearLocalStorage(/prop1|2/).should(ls => {
      expect(ls.getItem('prop1')).to.be.null;
      expect(ls.getItem('prop2')).to.be.null;
      expect(ls.getItem('prop3')).to.eq('magenta');
    });
  });
});
