2017-10-24 00:56:39 -04:00
import Clusters from '~/clusters/clusters_bundle' ;
import {
APPLICATION _INSTALLABLE ,
APPLICATION _INSTALLING ,
APPLICATION _INSTALLED ,
REQUEST _LOADING ,
REQUEST _SUCCESS ,
REQUEST _FAILURE ,
} from '~/clusters/constants' ;
import getSetTimeoutPromise from '../helpers/set_timeout_promise_helper' ;
describe ( 'Clusters' , ( ) => {
let cluster ;
preloadFixtures ( 'clusters/show_cluster.html.raw' ) ;
beforeEach ( ( ) => {
loadFixtures ( 'clusters/show_cluster.html.raw' ) ;
cluster = new Clusters ( ) ;
} ) ;
afterEach ( ( ) => {
cluster . destroy ( ) ;
} ) ;
describe ( 'toggle' , ( ) => {
it ( 'should update the button and the input field on click' , ( ) => {
cluster . toggleButton . click ( ) ;
expect (
cluster . toggleButton . classList ,
) . not . toContain ( 'checked' ) ;
expect (
cluster . toggleInput . getAttribute ( 'value' ) ,
) . toEqual ( 'false' ) ;
} ) ;
} ) ;
describe ( 'checkForNewInstalls' , ( ) => {
const INITIAL _APP _MAP = {
helm : { status : null , title : 'Helm Tiller' } ,
ingress : { status : null , title : 'Ingress' } ,
runner : { status : null , title : 'GitLab Runner' } ,
} ;
it ( 'does not show alert when things transition from initial null state to something' , ( ) => {
cluster . checkForNewInstalls ( INITIAL _APP _MAP , {
... INITIAL _APP _MAP ,
helm : { status : APPLICATION _INSTALLABLE , title : 'Helm Tiller' } ,
} ) ;
2017-11-07 07:28:02 -05:00
expect ( document . querySelector ( '.js-cluster-application-notice .flash-text' ) ) . toBeNull ( ) ;
2017-10-24 00:56:39 -04:00
} ) ;
it ( 'shows an alert when something gets newly installed' , ( ) => {
cluster . checkForNewInstalls ( {
... INITIAL _APP _MAP ,
helm : { status : APPLICATION _INSTALLING , title : 'Helm Tiller' } ,
} , {
... INITIAL _APP _MAP ,
helm : { status : APPLICATION _INSTALLED , title : 'Helm Tiller' } ,
} ) ;
2017-11-07 07:28:02 -05:00
expect ( document . querySelector ( '.js-cluster-application-notice .flash-text' ) ) . toBeDefined ( ) ;
expect ( document . querySelector ( '.js-cluster-application-notice .flash-text' ) . textContent . trim ( ) ) . toEqual ( 'Helm Tiller was successfully installed on your cluster' ) ;
2017-10-24 00:56:39 -04:00
} ) ;
it ( 'shows an alert when multiple things gets newly installed' , ( ) => {
cluster . checkForNewInstalls ( {
... INITIAL _APP _MAP ,
helm : { status : APPLICATION _INSTALLING , title : 'Helm Tiller' } ,
ingress : { status : APPLICATION _INSTALLABLE , title : 'Ingress' } ,
} , {
... INITIAL _APP _MAP ,
helm : { status : APPLICATION _INSTALLED , title : 'Helm Tiller' } ,
ingress : { status : APPLICATION _INSTALLED , title : 'Ingress' } ,
} ) ;
2017-11-07 07:28:02 -05:00
expect ( document . querySelector ( '.js-cluster-application-notice .flash-text' ) ) . toBeDefined ( ) ;
expect ( document . querySelector ( '.js-cluster-application-notice .flash-text' ) . textContent . trim ( ) ) . toEqual ( 'Helm Tiller, Ingress was successfully installed on your cluster' ) ;
2017-10-24 00:56:39 -04:00
} ) ;
} ) ;
describe ( 'updateContainer' , ( ) => {
describe ( 'when creating cluster' , ( ) => {
it ( 'should show the creating container' , ( ) => {
2017-11-06 11:07:19 -05:00
cluster . updateContainer ( null , 'creating' ) ;
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeFalsy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
} ) ;
it ( 'should continue to show `creating` banner with subsequent updates of the same status' , ( ) => {
cluster . updateContainer ( 'creating' , 'creating' ) ;
2017-10-24 00:56:39 -04:00
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeFalsy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
} ) ;
} ) ;
describe ( 'when cluster is created' , ( ) => {
it ( 'should show the success container' , ( ) => {
2017-11-06 11:07:19 -05:00
cluster . updateContainer ( null , 'created' ) ;
2017-10-24 00:56:39 -04:00
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeFalsy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
} ) ;
2017-11-06 11:07:19 -05:00
it ( 'should not show a banner when status is already `created`' , ( ) => {
cluster . updateContainer ( 'created' , 'created' ) ;
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
} ) ;
2017-10-24 00:56:39 -04:00
} ) ;
describe ( 'when cluster has error' , ( ) => {
it ( 'should show the error container' , ( ) => {
2017-11-06 11:07:19 -05:00
cluster . updateContainer ( null , 'errored' , 'this is an error' ) ;
2017-10-24 00:56:39 -04:00
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeFalsy ( ) ;
expect (
cluster . errorReasonContainer . textContent ,
) . toContain ( 'this is an error' ) ;
} ) ;
2017-11-06 11:07:19 -05:00
it ( 'should show `error` banner when previously `creating`' , ( ) => {
cluster . updateContainer ( 'creating' , 'errored' ) ;
expect (
cluster . creatingContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . successContainer . classList . contains ( 'hidden' ) ,
) . toBeTruthy ( ) ;
expect (
cluster . errorContainer . classList . contains ( 'hidden' ) ,
) . toBeFalsy ( ) ;
} ) ;
2017-10-24 00:56:39 -04:00
} ) ;
} ) ;
describe ( 'installApplication' , ( ) => {
it ( 'tries to install helm' , ( done ) => {
spyOn ( cluster . service , 'installApplication' ) . and . returnValue ( Promise . resolve ( ) ) ;
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( null ) ;
cluster . installApplication ( 'helm' ) ;
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( REQUEST _LOADING ) ;
expect ( cluster . store . state . applications . helm . requestReason ) . toEqual ( null ) ;
expect ( cluster . service . installApplication ) . toHaveBeenCalledWith ( 'helm' ) ;
getSetTimeoutPromise ( )
. then ( ( ) => {
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( REQUEST _SUCCESS ) ;
expect ( cluster . store . state . applications . helm . requestReason ) . toEqual ( null ) ;
} )
. then ( done )
. catch ( done . fail ) ;
} ) ;
it ( 'tries to install ingress' , ( done ) => {
spyOn ( cluster . service , 'installApplication' ) . and . returnValue ( Promise . resolve ( ) ) ;
expect ( cluster . store . state . applications . ingress . requestStatus ) . toEqual ( null ) ;
cluster . installApplication ( 'ingress' ) ;
expect ( cluster . store . state . applications . ingress . requestStatus ) . toEqual ( REQUEST _LOADING ) ;
expect ( cluster . store . state . applications . ingress . requestReason ) . toEqual ( null ) ;
expect ( cluster . service . installApplication ) . toHaveBeenCalledWith ( 'ingress' ) ;
getSetTimeoutPromise ( )
. then ( ( ) => {
expect ( cluster . store . state . applications . ingress . requestStatus ) . toEqual ( REQUEST _SUCCESS ) ;
expect ( cluster . store . state . applications . ingress . requestReason ) . toEqual ( null ) ;
} )
. then ( done )
. catch ( done . fail ) ;
} ) ;
it ( 'tries to install runner' , ( done ) => {
spyOn ( cluster . service , 'installApplication' ) . and . returnValue ( Promise . resolve ( ) ) ;
expect ( cluster . store . state . applications . runner . requestStatus ) . toEqual ( null ) ;
cluster . installApplication ( 'runner' ) ;
expect ( cluster . store . state . applications . runner . requestStatus ) . toEqual ( REQUEST _LOADING ) ;
expect ( cluster . store . state . applications . runner . requestReason ) . toEqual ( null ) ;
expect ( cluster . service . installApplication ) . toHaveBeenCalledWith ( 'runner' ) ;
getSetTimeoutPromise ( )
. then ( ( ) => {
expect ( cluster . store . state . applications . runner . requestStatus ) . toEqual ( REQUEST _SUCCESS ) ;
expect ( cluster . store . state . applications . runner . requestReason ) . toEqual ( null ) ;
} )
. then ( done )
. catch ( done . fail ) ;
} ) ;
it ( 'sets error request status when the request fails' , ( done ) => {
spyOn ( cluster . service , 'installApplication' ) . and . returnValue ( Promise . reject ( new Error ( 'STUBBED ERROR' ) ) ) ;
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( null ) ;
cluster . installApplication ( 'helm' ) ;
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( REQUEST _LOADING ) ;
expect ( cluster . store . state . applications . helm . requestReason ) . toEqual ( null ) ;
expect ( cluster . service . installApplication ) . toHaveBeenCalled ( ) ;
getSetTimeoutPromise ( )
. then ( ( ) => {
expect ( cluster . store . state . applications . helm . requestStatus ) . toEqual ( REQUEST _FAILURE ) ;
expect ( cluster . store . state . applications . helm . requestReason ) . toBeDefined ( ) ;
} )
. then ( done )
. catch ( done . fail ) ;
} ) ;
} ) ;
} ) ;