241 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import Store from '~/environments/stores/environments_store';
 | 
						|
import { environmentsList, serverData, deployBoardMockData } from './mock_data';
 | 
						|
 | 
						|
describe('Store', () => {
 | 
						|
  let store;
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    store = new Store();
 | 
						|
  });
 | 
						|
 | 
						|
  it('should start with a blank state', () => {
 | 
						|
    expect(store.state.environments.length).toEqual(0);
 | 
						|
    expect(store.state.stoppedCounter).toEqual(0);
 | 
						|
    expect(store.state.availableCounter).toEqual(0);
 | 
						|
    expect(store.state.paginationInformation).toEqual({});
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store environments', () => {
 | 
						|
    store.storeEnvironments(serverData);
 | 
						|
 | 
						|
    expect(store.state.environments.length).toEqual(serverData.length);
 | 
						|
    expect(store.state.environments[0]).toEqual(environmentsList[0]);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store available count', () => {
 | 
						|
    store.storeAvailableCount(2);
 | 
						|
 | 
						|
    expect(store.state.availableCounter).toEqual(2);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store stopped count', () => {
 | 
						|
    store.storeStoppedCount(2);
 | 
						|
 | 
						|
    expect(store.state.stoppedCounter).toEqual(2);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should add folder keys when environment is a folder', () => {
 | 
						|
    const environment = {
 | 
						|
      name: 'bar',
 | 
						|
      size: 3,
 | 
						|
      id: 2,
 | 
						|
    };
 | 
						|
 | 
						|
    store.storeEnvironments([environment]);
 | 
						|
 | 
						|
    expect(store.state.environments[0].isFolder).toEqual(true);
 | 
						|
    expect(store.state.environments[0].folderName).toEqual('bar');
 | 
						|
  });
 | 
						|
 | 
						|
  it('should extract content of `latest` key when provided', () => {
 | 
						|
    const environment = {
 | 
						|
      name: 'bar',
 | 
						|
      size: 3,
 | 
						|
      id: 2,
 | 
						|
      latest: {
 | 
						|
        last_deployment: {},
 | 
						|
        isStoppable: true,
 | 
						|
      },
 | 
						|
    };
 | 
						|
 | 
						|
    store.storeEnvironments([environment]);
 | 
						|
 | 
						|
    expect(store.state.environments[0].last_deployment).toEqual({});
 | 
						|
    expect(store.state.environments[0].isStoppable).toEqual(true);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store latest.name when the environment is not a folder', () => {
 | 
						|
    store.storeEnvironments(serverData);
 | 
						|
 | 
						|
    expect(store.state.environments[0].name).toEqual(serverData[0].latest.name);
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store root level name when environment is a folder', () => {
 | 
						|
    store.storeEnvironments(serverData);
 | 
						|
 | 
						|
    expect(store.state.environments[1].folderName).toEqual(serverData[1].name);
 | 
						|
  });
 | 
						|
 | 
						|
  describe('toggleFolder', () => {
 | 
						|
    it('should toggle folder', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.toggleFolder(store.state.environments[1]);
 | 
						|
 | 
						|
      expect(store.state.environments[1].isOpen).toEqual(true);
 | 
						|
 | 
						|
      store.toggleFolder(store.state.environments[1]);
 | 
						|
 | 
						|
      expect(store.state.environments[1].isOpen).toEqual(false);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should keep folder open when environments are updated', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.toggleFolder(store.state.environments[1]);
 | 
						|
 | 
						|
      expect(store.state.environments[1].isOpen).toEqual(true);
 | 
						|
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      expect(store.state.environments[1].isOpen).toEqual(true);
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  describe('setfolderContent', () => {
 | 
						|
    it('should store folder content', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.setfolderContent(store.state.environments[1], serverData);
 | 
						|
 | 
						|
      expect(store.state.environments[1].children.length).toEqual(serverData.length);
 | 
						|
      expect(store.state.environments[1].children[0].isChildren).toEqual(true);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should keep folder content when environments are updated', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.setfolderContent(store.state.environments[1], serverData);
 | 
						|
 | 
						|
      expect(store.state.environments[1].children.length).toEqual(serverData.length);
 | 
						|
      // poll
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      expect(store.state.environments[1].children.length).toEqual(serverData.length);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should parse deploy board data for children', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.setfolderContent(store.state.environments[1], [
 | 
						|
        {
 | 
						|
          name: 'foo',
 | 
						|
          size: 1,
 | 
						|
          latest: {
 | 
						|
            id: 1,
 | 
						|
            rollout_status: deployBoardMockData,
 | 
						|
          },
 | 
						|
        },
 | 
						|
      ]);
 | 
						|
      const result = store.state.environments[1].children[0];
 | 
						|
      expect(result).toMatchObject({
 | 
						|
        deployBoardData: deployBoardMockData,
 | 
						|
        hasDeployBoard: true,
 | 
						|
        isDeployBoardVisible: true,
 | 
						|
        isLoadingDeployBoard: false,
 | 
						|
        isEmptyDeployBoard: false,
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  describe('store pagination', () => {
 | 
						|
    it('should store normalized and integer pagination information', () => {
 | 
						|
      const pagination = {
 | 
						|
        'X-nExt-pAge': '2',
 | 
						|
        'X-page': '1',
 | 
						|
        'X-Per-Page': '1',
 | 
						|
        'X-Prev-Page': '2',
 | 
						|
        'X-TOTAL': '37',
 | 
						|
        'X-Total-Pages': '2',
 | 
						|
      };
 | 
						|
 | 
						|
      const expectedResult = {
 | 
						|
        perPage: 1,
 | 
						|
        page: 1,
 | 
						|
        total: 37,
 | 
						|
        totalPages: 2,
 | 
						|
        nextPage: 2,
 | 
						|
        previousPage: 2,
 | 
						|
      };
 | 
						|
 | 
						|
      store.setPagination(pagination);
 | 
						|
 | 
						|
      expect(store.state.paginationInformation).toEqual(expectedResult);
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  describe('getOpenFolders', () => {
 | 
						|
    it('should return open folder', () => {
 | 
						|
      store.storeEnvironments(serverData);
 | 
						|
 | 
						|
      store.toggleFolder(store.state.environments[1]);
 | 
						|
 | 
						|
      expect(store.getOpenFolders()[0]).toEqual(store.state.environments[1]);
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should store a non folder environment with deploy board if rollout_status key is provided', () => {
 | 
						|
    const environment = {
 | 
						|
      name: 'foo',
 | 
						|
      size: 1,
 | 
						|
      latest: {
 | 
						|
        id: 1,
 | 
						|
        rollout_status: deployBoardMockData,
 | 
						|
      },
 | 
						|
    };
 | 
						|
 | 
						|
    store.storeEnvironments([environment]);
 | 
						|
 | 
						|
    expect(store.state.environments[0].hasDeployBoard).toEqual(true);
 | 
						|
    expect(store.state.environments[0].isDeployBoardVisible).toEqual(true);
 | 
						|
    expect(store.state.environments[0].deployBoardData).toEqual(deployBoardMockData);
 | 
						|
  });
 | 
						|
 | 
						|
  describe('deploy boards', () => {
 | 
						|
    beforeEach(() => {
 | 
						|
      const environment = {
 | 
						|
        name: 'foo',
 | 
						|
        size: 1,
 | 
						|
        latest: {
 | 
						|
          id: 1,
 | 
						|
        },
 | 
						|
        rollout_status: deployBoardMockData,
 | 
						|
      };
 | 
						|
 | 
						|
      store.storeEnvironments([environment]);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should toggle deploy board property for given environment id', () => {
 | 
						|
      store.toggleDeployBoard(1);
 | 
						|
 | 
						|
      expect(store.state.environments[0].isDeployBoardVisible).toEqual(false);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should keep deploy board data when updating environments', () => {
 | 
						|
      expect(store.state.environments[0].deployBoardData).toEqual(deployBoardMockData);
 | 
						|
 | 
						|
      const environment = {
 | 
						|
        name: 'foo',
 | 
						|
        size: 1,
 | 
						|
        latest: {
 | 
						|
          id: 1,
 | 
						|
        },
 | 
						|
        rollout_status: deployBoardMockData,
 | 
						|
      };
 | 
						|
      store.storeEnvironments([environment]);
 | 
						|
 | 
						|
      expect(store.state.environments[0].deployBoardData).toEqual(deployBoardMockData);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 |