Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
60c0fafb
Commit
60c0fafb
authored
Feb 11, 2020
by
Kyle Wiebers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Merge branch '194235-move-environments_app_spec' into 'master'"
This reverts merge request !24318
parent
bc32d9f4
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
279 additions
and
168 deletions
+279
-168
spec/frontend/environments/environments_app_spec.js
spec/frontend/environments/environments_app_spec.js
+0
-168
spec/javascripts/environments/environments_app_spec.js
spec/javascripts/environments/environments_app_spec.js
+279
-0
No files found.
spec/frontend/environments/environments_app_spec.js
deleted
100644 → 0
View file @
bc32d9f4
import
{
mount
,
shallowMount
}
from
'
@vue/test-utils
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
Container
from
'
~/environments/components/container.vue
'
;
import
EmptyState
from
'
~/environments/components/empty_state.vue
'
;
import
EnvironmentsApp
from
'
~/environments/components/environments_app.vue
'
;
import
{
environment
,
folder
}
from
'
./mock_data
'
;
describe
(
'
Environment
'
,
()
=>
{
let
mock
;
let
wrapper
;
const
mockData
=
{
endpoint
:
'
environments.json
'
,
canCreateEnvironment
:
true
,
canReadEnvironment
:
true
,
newEnvironmentPath
:
'
environments/new
'
,
helpPagePath
:
'
help
'
,
canaryDeploymentFeatureId
:
'
canary_deployment
'
,
showCanaryDeploymentCallout
:
true
,
userCalloutsPath
:
'
/callouts
'
,
lockPromotionSvgPath
:
'
/assets/illustrations/lock-promotion.svg
'
,
helpCanaryDeploymentsPath
:
'
help/canary-deployments
'
,
};
const
mockRequest
=
(
response
,
body
)
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
response
,
body
,
{
'
X-nExt-pAge
'
:
'
2
'
,
'
x-page
'
:
'
1
'
,
'
X-Per-Page
'
:
'
1
'
,
'
X-Prev-Page
'
:
''
,
'
X-TOTAL
'
:
'
37
'
,
'
X-Total-Pages
'
:
'
2
'
,
});
};
const
createWrapper
=
(
shallow
=
false
)
=>
{
const
fn
=
shallow
?
shallowMount
:
mount
;
wrapper
=
fn
(
EnvironmentsApp
,
{
propsData
:
mockData
});
return
axios
.
waitForAll
();
};
beforeEach
(()
=>
{
mock
=
new
MockAdapter
(
axios
);
});
afterEach
(()
=>
{
wrapper
.
destroy
();
mock
.
restore
();
});
describe
(
'
successful request
'
,
()
=>
{
describe
(
'
without environments
'
,
()
=>
{
beforeEach
(()
=>
{
mockRequest
(
200
,
{
environments
:
[]
});
return
createWrapper
(
true
);
});
it
(
'
should render the empty state
'
,
()
=>
{
expect
(
wrapper
.
find
(
EmptyState
).
exists
()).
toBe
(
true
);
});
describe
(
'
when it is possible to enable a review app
'
,
()
=>
{
beforeEach
(()
=>
{
mockRequest
(
200
,
{
environments
:
[],
review_app
:
{
can_setup_review_app
:
true
}
});
return
createWrapper
();
});
it
(
'
should render the enable review app button
'
,
()
=>
{
expect
(
wrapper
.
find
(
'
.js-enable-review-app-button
'
).
text
()).
toContain
(
'
Enable review app
'
,
);
});
});
});
describe
(
'
with paginated environments
'
,
()
=>
{
const
environmentList
=
[
environment
];
beforeEach
(()
=>
{
mockRequest
(
200
,
{
environments
:
environmentList
,
stopped_count
:
1
,
available_count
:
0
,
});
return
createWrapper
();
});
it
(
'
should render a conatiner table with environments
'
,
()
=>
{
const
containerTable
=
wrapper
.
find
(
Container
);
expect
(
containerTable
.
exists
()).
toBe
(
true
);
expect
(
containerTable
.
props
(
'
environments
'
).
length
).
toEqual
(
environmentList
.
length
);
expect
(
containerTable
.
find
(
'
.environment-name
'
).
text
()).
toEqual
(
environmentList
[
0
].
name
);
});
describe
(
'
pagination
'
,
()
=>
{
it
(
'
should render pagination
'
,
()
=>
{
expect
(
wrapper
.
findAll
(
'
.gl-pagination li
'
).
length
).
toEqual
(
9
);
});
it
(
'
should make an API request when page is clicked
'
,
()
=>
{
jest
.
spyOn
(
wrapper
.
vm
,
'
updateContent
'
).
mockImplementation
(()
=>
{});
wrapper
.
find
(
'
.gl-pagination li:nth-child(3) .page-link
'
).
trigger
(
'
click
'
);
expect
(
wrapper
.
vm
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
'
available
'
,
page
:
'
2
'
});
});
it
(
'
should make an API request when using tabs
'
,
()
=>
{
jest
.
spyOn
(
wrapper
.
vm
,
'
updateContent
'
).
mockImplementation
(()
=>
{});
wrapper
.
find
(
'
.js-environments-tab-stopped
'
).
trigger
(
'
click
'
);
expect
(
wrapper
.
vm
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
'
stopped
'
,
page
:
'
1
'
});
});
});
});
});
describe
(
'
unsuccessful request
'
,
()
=>
{
beforeEach
(()
=>
{
mockRequest
(
500
,
{});
return
createWrapper
(
true
);
});
it
(
'
should render empty state
'
,
()
=>
{
expect
(
wrapper
.
find
(
EmptyState
).
exists
()).
toBe
(
true
);
});
});
describe
(
'
expandable folders
'
,
()
=>
{
beforeEach
(()
=>
{
mockRequest
(
200
,
{
environments
:
[
folder
],
stopped_count
:
1
,
available_count
:
0
,
});
mock
.
onGet
(
environment
.
folder_path
).
reply
(
200
,
{
environments
:
[
environment
]
});
return
createWrapper
().
then
(()
=>
{
// open folder
wrapper
.
find
(
'
.folder-name
'
).
trigger
(
'
click
'
);
return
axios
.
waitForAll
();
});
});
it
(
'
should open a closed folder
'
,
()
=>
{
expect
(
wrapper
.
find
(
'
.folder-icon.ic-chevron-right
'
).
exists
()).
toBe
(
false
);
});
it
(
'
should close an opened folder
'
,
()
=>
{
expect
(
wrapper
.
find
(
'
.folder-icon.ic-chevron-down
'
).
exists
()).
toBe
(
true
);
// close folder
wrapper
.
find
(
'
.folder-name
'
).
trigger
(
'
click
'
);
wrapper
.
vm
.
$nextTick
(()
=>
{
expect
(
wrapper
.
find
(
'
.folder-icon.ic-chevron-down
'
).
exists
()).
toBe
(
false
);
});
});
it
(
'
should show children environments
'
,
()
=>
{
expect
(
wrapper
.
findAll
(
'
.js-child-row
'
).
length
).
toEqual
(
1
);
});
it
(
'
should show a button to show all environments
'
,
()
=>
{
expect
(
wrapper
.
find
(
'
.text-center > a.btn
'
).
text
()).
toContain
(
'
Show all
'
);
});
});
});
spec/javascripts/environments/environments_app_spec.js
0 → 100644
View file @
60c0fafb
import
Vue
from
'
vue
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
mountComponent
from
'
spec/helpers/vue_mount_component_helper
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
environmentsComponent
from
'
~/environments/components/environments_app.vue
'
;
import
{
environment
,
folder
}
from
'
./mock_data
'
;
describe
(
'
Environment
'
,
()
=>
{
const
mockData
=
{
endpoint
:
'
environments.json
'
,
canCreateEnvironment
:
true
,
canReadEnvironment
:
true
,
newEnvironmentPath
:
'
environments/new
'
,
helpPagePath
:
'
help
'
,
canaryDeploymentFeatureId
:
'
canary_deployment
'
,
showCanaryDeploymentCallout
:
true
,
userCalloutsPath
:
'
/callouts
'
,
lockPromotionSvgPath
:
'
/assets/illustrations/lock-promotion.svg
'
,
helpCanaryDeploymentsPath
:
'
help/canary-deployments
'
,
};
let
EnvironmentsComponent
;
let
component
;
let
mock
;
beforeEach
(()
=>
{
mock
=
new
MockAdapter
(
axios
);
EnvironmentsComponent
=
Vue
.
extend
(
environmentsComponent
);
});
afterEach
(()
=>
{
component
.
$destroy
();
mock
.
restore
();
});
describe
(
'
successful request
'
,
()
=>
{
describe
(
'
without environments
'
,
()
=>
{
beforeEach
(
done
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
200
,
{
environments
:
[]
});
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
setTimeout
(()
=>
{
done
();
},
0
);
});
it
(
'
should render the empty state
'
,
()
=>
{
expect
(
component
.
$el
.
querySelector
(
'
.js-new-environment-button
'
).
textContent
).
toContain
(
'
New environment
'
,
);
expect
(
component
.
$el
.
querySelector
(
'
.js-blank-state-title
'
).
textContent
).
toContain
(
"
You don't have any environments right now
"
,
);
});
describe
(
'
when it is possible to enable a review app
'
,
()
=>
{
beforeEach
(
done
=>
{
mock
.
onGet
(
mockData
.
endpoint
)
.
reply
(
200
,
{
environments
:
[],
review_app
:
{
can_setup_review_app
:
true
}
});
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
setTimeout
(()
=>
{
done
();
},
0
);
});
it
(
'
should render the enable review app button
'
,
()
=>
{
expect
(
component
.
$el
.
querySelector
(
'
.js-enable-review-app-button
'
).
textContent
).
toContain
(
'
Enable review app
'
,
);
});
});
});
describe
(
'
with paginated environments
'
,
()
=>
{
beforeEach
(
done
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
200
,
{
environments
:
[
environment
],
stopped_count
:
1
,
available_count
:
0
,
},
{
'
X-nExt-pAge
'
:
'
2
'
,
'
x-page
'
:
'
1
'
,
'
X-Per-Page
'
:
'
1
'
,
'
X-Prev-Page
'
:
''
,
'
X-TOTAL
'
:
'
37
'
,
'
X-Total-Pages
'
:
'
2
'
,
},
);
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
setTimeout
(()
=>
{
done
();
},
0
);
});
it
(
'
should render a table with environments
'
,
()
=>
{
expect
(
component
.
$el
.
querySelectorAll
(
'
table
'
)).
not
.
toBeNull
();
expect
(
component
.
$el
.
querySelector
(
'
.environment-name
'
).
textContent
.
trim
()).
toEqual
(
environment
.
name
,
);
});
describe
(
'
pagination
'
,
()
=>
{
it
(
'
should render pagination
'
,
()
=>
{
expect
(
component
.
$el
.
querySelectorAll
(
'
.gl-pagination li
'
).
length
).
toEqual
(
9
);
});
it
(
'
should make an API request when page is clicked
'
,
done
=>
{
spyOn
(
component
,
'
updateContent
'
);
setTimeout
(()
=>
{
component
.
$el
.
querySelector
(
'
.gl-pagination li:nth-child(3) .page-link
'
).
click
();
expect
(
component
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
'
available
'
,
page
:
'
2
'
});
done
();
},
0
);
});
it
(
'
should make an API request when using tabs
'
,
done
=>
{
setTimeout
(()
=>
{
spyOn
(
component
,
'
updateContent
'
);
component
.
$el
.
querySelector
(
'
.js-environments-tab-stopped
'
).
click
();
expect
(
component
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
'
stopped
'
,
page
:
'
1
'
});
done
();
},
0
);
});
});
});
});
describe
(
'
unsuccessfull request
'
,
()
=>
{
beforeEach
(
done
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
500
,
{});
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
setTimeout
(()
=>
{
done
();
},
0
);
});
it
(
'
should render empty state
'
,
()
=>
{
expect
(
component
.
$el
.
querySelector
(
'
.js-blank-state-title
'
).
textContent
).
toContain
(
"
You don't have any environments right now
"
,
);
});
});
describe
(
'
expandable folders
'
,
()
=>
{
beforeEach
(()
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
200
,
{
environments
:
[
folder
],
stopped_count
:
0
,
available_count
:
1
,
},
{
'
X-nExt-pAge
'
:
'
2
'
,
'
x-page
'
:
'
1
'
,
'
X-Per-Page
'
:
'
1
'
,
'
X-Prev-Page
'
:
''
,
'
X-TOTAL
'
:
'
37
'
,
'
X-Total-Pages
'
:
'
2
'
,
},
);
mock
.
onGet
(
environment
.
folder_path
).
reply
(
200
,
{
environments
:
[
environment
]
});
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
});
it
(
'
should open a closed folder
'
,
done
=>
{
setTimeout
(()
=>
{
component
.
$el
.
querySelector
(
'
.folder-name
'
).
click
();
Vue
.
nextTick
(()
=>
{
expect
(
component
.
$el
.
querySelector
(
'
.folder-icon.ic-chevron-right
'
)).
toBe
(
null
);
done
();
});
},
0
);
});
it
(
'
should close an opened folder
'
,
done
=>
{
setTimeout
(()
=>
{
// open folder
component
.
$el
.
querySelector
(
'
.folder-name
'
).
click
();
Vue
.
nextTick
(()
=>
{
// close folder
component
.
$el
.
querySelector
(
'
.folder-name
'
).
click
();
Vue
.
nextTick
(()
=>
{
expect
(
component
.
$el
.
querySelector
(
'
.folder-icon.ic-chevron-down
'
)).
toBe
(
null
);
done
();
});
});
},
0
);
});
it
(
'
should show children environments and a button to show all environments
'
,
done
=>
{
setTimeout
(()
=>
{
// open folder
component
.
$el
.
querySelector
(
'
.folder-name
'
).
click
();
Vue
.
nextTick
(()
=>
{
// wait for next async request
setTimeout
(()
=>
{
expect
(
component
.
$el
.
querySelectorAll
(
'
.js-child-row
'
).
length
).
toEqual
(
1
);
expect
(
component
.
$el
.
querySelector
(
'
.text-center > a.btn
'
).
textContent
).
toContain
(
'
Show all
'
,
);
done
();
});
});
},
0
);
});
});
describe
(
'
methods
'
,
()
=>
{
beforeEach
(()
=>
{
mock
.
onGet
(
mockData
.
endpoint
).
reply
(
200
,
{
environments
:
[],
stopped_count
:
0
,
available_count
:
1
,
},
{},
);
component
=
mountComponent
(
EnvironmentsComponent
,
mockData
);
spyOn
(
window
.
history
,
'
pushState
'
).
and
.
stub
();
});
describe
(
'
updateContent
'
,
()
=>
{
it
(
'
should set given parameters
'
,
done
=>
{
component
.
updateContent
({
scope
:
'
stopped
'
,
page
:
'
3
'
})
.
then
(()
=>
{
expect
(
component
.
page
).
toEqual
(
'
3
'
);
expect
(
component
.
scope
).
toEqual
(
'
stopped
'
);
expect
(
component
.
requestData
.
scope
).
toEqual
(
'
stopped
'
);
expect
(
component
.
requestData
.
page
).
toEqual
(
'
3
'
);
done
();
})
.
catch
(
done
.
fail
);
});
});
describe
(
'
onChangeTab
'
,
()
=>
{
it
(
'
should set page to 1
'
,
()
=>
{
spyOn
(
component
,
'
updateContent
'
);
component
.
onChangeTab
(
'
stopped
'
);
expect
(
component
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
'
stopped
'
,
page
:
'
1
'
});
});
});
describe
(
'
onChangePage
'
,
()
=>
{
it
(
'
should update page and keep scope
'
,
()
=>
{
spyOn
(
component
,
'
updateContent
'
);
component
.
onChangePage
(
4
);
expect
(
component
.
updateContent
).
toHaveBeenCalledWith
({
scope
:
component
.
scope
,
page
:
'
4
'
});
});
});
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment