/// <reference types="Cypress" />
/* globals cy, expect */

context('Delete Channel Browser Testing', () => {
  let menuQuery = [
        'solid-display.circle-tab',
        'solid-display:last-child',
        'solid-display[order-by="name"]'
      ],
      menuCountQuery = [
        'solid-display.circle-tab',
        'solid-display',
        'solid-display[order-by="name"]'
      ];
  before(() => {
    cy.clearLocalStorageSnapshot();
    cy.clearLocalStorage({ domain: null });
    cy.clearCookies({ domain: null });
  });
  beforeEach(() => cy.restoreLocalStorage());
  afterEach(() => cy.saveLocalStorage());
  it('should visit user login screend', () => cy.userLogin());
  it('should login', () => cy.login());
  describe('Channel Retirement process', () => {
    let channelsLength;
    it('should visit the channels list screen', () => {
      cy.visit('/admin-circles');
      cy.location().should((loc) => {
        expect(loc.pathname).to.eq('/admin-circles');
      });
    });
    it('should visit the last channel edit screen', () => {
      cy.get(menuQuery.join(' '))
        .invoke('attr', 'data-src')
        .then(url => cy.encodeUrl(url).then(id  => {
          cy.visit('/circles/@' + id + '/circles-information');
          cy.location().should((loc) => {
            expect(loc.pathname).to.eq('/circles/@' + id + '/circles-information');
          });
        }));
    });
    it('should count the number of joined channels', () => {
      cy.get(menuCountQuery.join(' ')).its('length').then(length => channelsLength = length);
    });
    it('should click button to retire the channel', () => {
      cy.get('#circles-profile solid-delete[data-label="Supprimer le canal"] button').click();
    });
    it('should stay on channel edit screen', () => {
      cy.get(menuQuery.join(' '))
        .invoke('attr', 'data-src')
        .then(url => cy.encodeUrl(url).then(id  => {
          cy.location().should((loc) => {
            expect(loc.pathname).to.eq('/circles/@' + id + '/circles-information');
          });
        }));
    });
    it('should check if channel was retired', () => {
      cy.get(menuCountQuery.join(' ')).its('length').should(length => {
        expect(length).to.eq(channelsLength - 1);
      });
    });
  });
});