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
95f5d578
Commit
95f5d578
authored
Feb 09, 2022
by
Mark Florian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove setImmediate usage in specs
Part of
https://gitlab.com/gitlab-org/gitlab/-/issues/344247
.
parent
26138b35
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
181 additions
and
246 deletions
+181
-246
spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js
.../vue_mr_widget/components/states/mr_widget_merged_spec.js
+10
-9
spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js
...widget/components/states/mr_widget_ready_to_merge_spec.js
+67
-77
spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js
...end/vue_mr_widget/components/states/mr_widget_wip_spec.js
+12
-12
spec/frontend/vue_shared/alert_details/alert_status_spec.js
spec/frontend/vue_shared/alert_details/alert_status_spec.js
+11
-9
spec/frontend/vue_shared/components/diff_viewer/diff_viewer_spec.js
...end/vue_shared/components/diff_viewer/diff_viewer_spec.js
+19
-25
spec/frontend/vue_shared/components/diff_viewer/viewers/image_diff_viewer_spec.js
.../components/diff_viewer/viewers/image_diff_viewer_spec.js
+20
-30
spec/frontend/vue_shared/components/file_finder/index_spec.js
.../frontend/vue_shared/components/file_finder/index_spec.js
+42
-84
No files found.
spec/frontend/vue_mr_widget/components/states/mr_widget_merged_spec.js
View file @
95f5d578
import
{
getByRole
}
from
'
@testing-library/dom
'
;
import
Vue
,
{
nextTick
}
from
'
vue
'
;
import
mountComponent
from
'
helpers/vue_mount_component_helper
'
;
import
waitForPromises
from
'
helpers/wait_for_promises
'
;
import
{
OPEN_REVERT_MODAL
,
OPEN_CHERRY_PICK_MODAL
}
from
'
~/projects/commit/constants
'
;
import
modalEventHub
from
'
~/projects/commit/event_hub
'
;
import
mergedComponent
from
'
~/vue_merge_request_widget/components/states/mr_widget_merged.vue
'
;
...
...
@@ -127,7 +128,7 @@ describe('MRWidgetMerged', () => {
describe
(
'
methods
'
,
()
=>
{
describe
(
'
removeSourceBranch
'
,
()
=>
{
it
(
'
should set flag and call service then request main component to update the widget
'
,
(
done
)
=>
{
it
(
'
should set flag and call service then request main component to update the widget
'
,
async
(
)
=>
{
jest
.
spyOn
(
vm
.
service
,
'
removeSourceBranch
'
).
mockReturnValue
(
new
Promise
((
resolve
)
=>
{
resolve
({
...
...
@@ -139,14 +140,14 @@ describe('MRWidgetMerged', () => {
);
vm
.
removeSourceBranch
();
setImmediate
(()
=>
{
const
args
=
eventHub
.
$emit
.
mock
.
calls
[
0
]
;
expect
(
vm
.
isMakingRequest
).
toEqual
(
true
)
;
expect
(
args
[
0
]).
toEqual
(
'
MRWidgetUpdateRequested
'
);
expect
(
args
[
1
]).
not
.
toThrow
(
);
done
(
);
}
);
await
waitForPromises
()
;
const
args
=
eventHub
.
$emit
.
mock
.
calls
[
0
]
;
expect
(
vm
.
isMakingRequest
).
toEqual
(
true
);
expect
(
args
[
0
]).
toEqual
(
'
MRWidgetUpdateRequested
'
);
expect
(
args
[
1
]).
not
.
toThrow
(
);
});
});
});
...
...
spec/frontend/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js
View file @
95f5d578
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
{
nextTick
}
from
'
vue
'
;
import
{
GlSprintf
}
from
'
@gitlab/ui
'
;
import
waitForPromises
from
'
helpers/wait_for_promises
'
;
import
simplePoll
from
'
~/lib/utils/simple_poll
'
;
import
CommitEdit
from
'
~/vue_merge_request_widget/components/states/commit_edit.vue
'
;
import
CommitMessageDropdown
from
'
~/vue_merge_request_widget/components/states/commit_message_dropdown.vue
'
;
...
...
@@ -261,73 +262,68 @@ describe('ReadyToMerge', () => {
describe
(
'
methods
'
,
()
=>
{
describe
(
'
handleMergeButtonClick
'
,
()
=>
{
const
returnPromise
=
(
status
)
=>
new
Promise
((
resolve
)
=>
{
resolve
({
data
:
{
status
,
},
});
});
const
response
=
(
status
)
=>
({
data
:
{
status
,
},
});
it
(
'
should handle merge when pipeline succeeds
'
,
(
done
)
=>
{
it
(
'
should handle merge when pipeline succeeds
'
,
async
(
)
=>
{
createComponent
();
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
merge
'
)
.
mockRe
turnValue
(
returnPromi
se
(
'
merge_when_pipeline_succeeds
'
));
.
mockRe
solvedValue
(
respon
se
(
'
merge_when_pipeline_succeeds
'
));
// setData usage is discouraged. See https://gitlab.com/groups/gitlab-org/-/epics/7330 for details
// eslint-disable-next-line no-restricted-syntax
wrapper
.
setData
({
removeSourceBranch
:
false
});
wrapper
.
vm
.
handleMergeButtonClick
(
true
);
setImmediate
(()
=>
{
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
MRWidgetUpdateRequested
'
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
StateMachineValueChanged
'
,
{
transition
:
'
start-auto-merge
'
,
});
await
waitForPromises
();
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
];
expect
(
params
).
toEqual
(
expect
.
objectContaining
({
sha
:
wrapper
.
vm
.
mr
.
sha
,
commit_message
:
wrapper
.
vm
.
mr
.
commitMessage
,
should_remove_source_branch
:
false
,
auto_merge_strategy
:
'
merge_when_pipeline_succeeds
'
,
}),
);
done
();
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
MRWidgetUpdateRequested
'
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
StateMachineValueChanged
'
,
{
transition
:
'
start-auto-merge
'
,
});
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
];
expect
(
params
).
toEqual
(
expect
.
objectContaining
({
sha
:
wrapper
.
vm
.
mr
.
sha
,
commit_message
:
wrapper
.
vm
.
mr
.
commitMessage
,
should_remove_source_branch
:
false
,
auto_merge_strategy
:
'
merge_when_pipeline_succeeds
'
,
}),
);
});
it
(
'
should handle merge failed
'
,
(
done
)
=>
{
it
(
'
should handle merge failed
'
,
async
(
)
=>
{
createComponent
();
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
merge
'
).
mockRe
turnValue
(
returnPromi
se
(
'
failed
'
));
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
merge
'
).
mockRe
solvedValue
(
respon
se
(
'
failed
'
));
wrapper
.
vm
.
handleMergeButtonClick
(
false
,
true
);
setImmediate
(()
=>
{
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
FailedToMerge
'
,
undefined
);
await
waitForPromises
();
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
];
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
FailedToMerge
'
,
undefined
);
expect
(
params
.
should_remove_source_branch
).
toBeTruthy
()
;
expect
(
params
.
auto_merge_strategy
).
toBeUndefined
();
done
();
}
);
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
]
;
expect
(
params
.
should_remove_source_branch
).
toBeTruthy
();
expect
(
params
.
auto_merge_strategy
).
toBeUndefined
(
);
});
it
(
'
should handle merge action accepted case
'
,
(
done
)
=>
{
it
(
'
should handle merge action accepted case
'
,
async
(
)
=>
{
createComponent
();
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
merge
'
).
mockRe
turnValue
(
returnPromi
se
(
'
success
'
));
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
merge
'
).
mockRe
solvedValue
(
respon
se
(
'
success
'
));
jest
.
spyOn
(
wrapper
.
vm
.
mr
,
'
transitionStateMachine
'
);
wrapper
.
vm
.
handleMergeButtonClick
();
...
...
@@ -335,18 +331,17 @@ describe('ReadyToMerge', () => {
transition
:
'
start-merge
'
,
});
setImmediate
(()
=>
{
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
wrapper
.
vm
.
mr
.
transitionStateMachine
).
toHaveBeenCalledWith
({
transition
:
'
start-merge
'
,
});
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
];
await
waitForPromises
();
expect
(
params
.
should_remove_source_branch
).
toBeTruthy
();
expect
(
params
.
auto_merge_strategy
).
toBeUndefined
();
done
();
expect
(
wrapper
.
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
wrapper
.
vm
.
mr
.
transitionStateMachine
).
toHaveBeenCalledWith
({
transition
:
'
start-merge
'
,
});
const
params
=
wrapper
.
vm
.
service
.
merge
.
mock
.
calls
[
0
][
0
];
expect
(
params
.
should_remove_source_branch
).
toBeTruthy
();
expect
(
params
.
auto_merge_strategy
).
toBeUndefined
();
});
});
...
...
@@ -364,20 +359,17 @@ describe('ReadyToMerge', () => {
});
describe
(
'
handleRemoveBranchPolling
'
,
()
=>
{
const
returnPromise
=
(
state
)
=>
new
Promise
((
resolve
)
=>
{
resolve
({
data
:
{
source_branch_exists
:
state
,
},
});
});
const
response
=
(
state
)
=>
({
data
:
{
source_branch_exists
:
state
,
},
});
it
(
'
should call start and stop polling when MR merged
'
,
(
done
)
=>
{
it
(
'
should call start and stop polling when MR merged
'
,
async
(
)
=>
{
createComponent
();
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
poll
'
).
mockRe
turnValue
(
returnPromi
se
(
false
));
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
poll
'
).
mockRe
solvedValue
(
respon
se
(
false
));
let
cpc
=
false
;
// continuePollingCalled
let
spc
=
false
;
// stopPollingCalled
...
...
@@ -390,28 +382,27 @@ describe('ReadyToMerge', () => {
spc
=
true
;
},
);
setImmediate
(()
=>
{
expect
(
wrapper
.
vm
.
service
.
poll
).
toHaveBeenCalled
();
const
args
=
eventHub
.
$emit
.
mock
.
calls
[
0
]
;
await
waitForPromises
()
;
expect
(
args
[
0
]).
toEqual
(
'
MRWidgetUpdateRequested
'
);
expect
(
args
[
1
]).
toBeDefined
();
args
[
1
]();
expect
(
wrapper
.
vm
.
service
.
poll
).
toHaveBeenCalled
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
SetBranchRemoveFlag
'
,
[
false
])
;
const
args
=
eventHub
.
$emit
.
mock
.
calls
[
0
]
;
expect
(
cpc
).
toBeFalsy
();
expect
(
spc
).
toBeTruthy
();
expect
(
args
[
0
]).
toEqual
(
'
MRWidgetUpdateRequested
'
);
expect
(
args
[
1
]).
toBeDefined
();
args
[
1
]();
done
();
});
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
SetBranchRemoveFlag
'
,
[
false
]);
expect
(
cpc
).
toBeFalsy
();
expect
(
spc
).
toBeTruthy
();
});
it
(
'
should continue polling until MR is merged
'
,
(
done
)
=>
{
it
(
'
should continue polling until MR is merged
'
,
async
(
)
=>
{
createComponent
();
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
poll
'
).
mockRe
turnValue
(
returnPromi
se
(
true
));
jest
.
spyOn
(
wrapper
.
vm
.
service
,
'
poll
'
).
mockRe
solvedValue
(
respon
se
(
true
));
let
cpc
=
false
;
// continuePollingCalled
let
spc
=
false
;
// stopPollingCalled
...
...
@@ -424,12 +415,11 @@ describe('ReadyToMerge', () => {
spc
=
true
;
},
);
setImmediate
(()
=>
{
expect
(
cpc
).
toBeTruthy
();
expect
(
spc
).
toBeFalsy
();
done
();
});
await
waitForPromises
();
expect
(
cpc
).
toBeTruthy
();
expect
(
spc
).
toBeFalsy
();
});
});
});
...
...
spec/frontend/vue_mr_widget/components/states/mr_widget_wip_spec.js
View file @
95f5d578
import
Vue
,
{
nextTick
}
from
'
vue
'
;
import
waitForPromises
from
'
helpers/wait_for_promises
'
;
import
WorkInProgress
from
'
~/vue_merge_request_widget/components/states/work_in_progress.vue
'
;
import
toast
from
'
~/vue_shared/plugins/global_toast
'
;
import
eventHub
from
'
~/vue_merge_request_widget/event_hub
'
;
...
...
@@ -47,7 +48,7 @@ describe('Wip', () => {
};
describe
(
'
handleRemoveDraft
'
,
()
=>
{
it
(
'
should make a request to service and handle response
'
,
(
done
)
=>
{
it
(
'
should make a request to service and handle response
'
,
async
(
)
=>
{
const
vm
=
createComponent
();
jest
.
spyOn
(
eventHub
,
'
$emit
'
).
mockImplementation
(()
=>
{});
...
...
@@ -60,12 +61,12 @@ describe('Wip', () => {
);
vm
.
handleRemoveDraft
();
setImmediate
(()
=>
{
expect
(
vm
.
isMakingRequest
).
toBeTruthy
();
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
UpdateWidgetData
'
,
mrObj
);
expect
(
toast
).
toHaveBeenCalledWith
(
'
Marked as ready. Merging is now allowed.
'
);
done
(
);
}
);
await
waitForPromises
();
expect
(
vm
.
isMakingRequest
).
toBeTruthy
(
);
expect
(
eventHub
.
$emit
).
toHaveBeenCalledWith
(
'
UpdateWidgetData
'
,
mrObj
);
expect
(
toast
).
toHaveBeenCalledWith
(
'
Marked as ready. Merging is now allowed.
'
);
});
});
});
...
...
@@ -91,13 +92,12 @@ describe('Wip', () => {
);
});
it
(
'
should not show removeWIP button is user cannot update MR
'
,
(
done
)
=>
{
it
(
'
should not show removeWIP button is user cannot update MR
'
,
async
(
)
=>
{
vm
.
mr
.
removeWIPPath
=
''
;
nextTick
(()
=>
{
expect
(
el
.
querySelector
(
'
.js-remove-draft
'
)).
toEqual
(
null
);
done
();
});
await
nextTick
();
expect
(
el
.
querySelector
(
'
.js-remove-draft
'
)).
toEqual
(
null
);
});
});
});
spec/frontend/vue_shared/alert_details/alert_status_spec.js
View file @
95f5d578
...
...
@@ -176,17 +176,18 @@ describe('AlertManagementStatus', () => {
jest
.
spyOn
(
Tracking
,
'
event
'
);
});
it
(
'
should not track alert status updates when the tracking options do not exist
'
,
()
=>
{
it
(
'
should not track alert status updates when the tracking options do not exist
'
,
async
()
=>
{
mountComponent
({});
Tracking
.
event
.
mockClear
();
jest
.
spyOn
(
wrapper
.
vm
.
$apollo
,
'
mutate
'
).
mockResolvedValue
({});
findFirstStatusOption
().
vm
.
$emit
(
'
click
'
);
setImmediate
(()
=>
{
expect
(
Tracking
.
event
).
not
.
toHaveBeenCalled
();
});
await
nextTick
();
expect
(
Tracking
.
event
).
not
.
toHaveBeenCalled
();
});
it
(
'
should track alert status updates when the tracking options exist
'
,
()
=>
{
it
(
'
should track alert status updates when the tracking options exist
'
,
async
()
=>
{
const
trackAlertStatusUpdateOptions
=
{
category
:
'
Alert Management
'
,
action
:
'
update_alert_status
'
,
...
...
@@ -196,11 +197,12 @@ describe('AlertManagementStatus', () => {
Tracking
.
event
.
mockClear
();
jest
.
spyOn
(
wrapper
.
vm
.
$apollo
,
'
mutate
'
).
mockResolvedValue
({});
findFirstStatusOption
().
vm
.
$emit
(
'
click
'
);
await
nextTick
();
const
status
=
findFirstStatusOption
().
text
();
setImmediate
(()
=>
{
const
{
category
,
action
,
label
}
=
trackAlertStatusUpdateOptions
;
expect
(
Tracking
.
event
).
toHaveBeenCalledWith
(
category
,
action
,
{
label
,
property
:
status
});
});
const
{
category
,
action
,
label
}
=
trackAlertStatusUpdateOptions
;
expect
(
Tracking
.
event
).
toHaveBeenCalledWith
(
category
,
action
,
{
label
,
property
:
status
});
});
});
});
spec/frontend/vue_shared/components/diff_viewer/diff_viewer_spec.js
View file @
95f5d578
import
Vue
from
'
vue
'
;
import
Vue
,
{
nextTick
}
from
'
vue
'
;
import
mountComponent
from
'
helpers/vue_mount_component_helper
'
;
import
{
GREEN_BOX_IMAGE_URL
,
RED_BOX_IMAGE_URL
}
from
'
spec/test_constants
'
;
...
...
@@ -26,27 +26,25 @@ describe('DiffViewer', () => {
vm
.
$destroy
();
});
it
(
'
renders image diff
'
,
(
done
)
=>
{
it
(
'
renders image diff
'
,
async
(
)
=>
{
window
.
gon
=
{
relative_url_root
:
''
,
};
createComponent
({
...
requiredProps
,
projectPath
:
''
});
setImmediate
(()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.deleted img
'
).
getAttribute
(
'
src
'
)).
toBe
(
`//-/raw/DEF/
${
RED_BOX_IMAGE_URL
}
`
,
);
await
nextTick
();
expect
(
vm
.
$el
.
querySelector
(
'
.add
ed img
'
).
getAttribute
(
'
src
'
)).
toBe
(
`//-/raw/ABC/
${
GREEN
_BOX_IMAGE_URL
}
`
,
);
expect
(
vm
.
$el
.
querySelector
(
'
.delet
ed img
'
).
getAttribute
(
'
src
'
)).
toBe
(
`//-/raw/DEF/
${
RED
_BOX_IMAGE_URL
}
`
,
);
done
();
});
expect
(
vm
.
$el
.
querySelector
(
'
.added img
'
).
getAttribute
(
'
src
'
)).
toBe
(
`//-/raw/ABC/
${
GREEN_BOX_IMAGE_URL
}
`
,
);
});
it
(
'
renders fallback download diff display
'
,
(
done
)
=>
{
it
(
'
renders fallback download diff display
'
,
async
(
)
=>
{
createComponent
({
...
requiredProps
,
diffViewerMode
:
'
added
'
,
...
...
@@ -54,22 +52,18 @@ describe('DiffViewer', () => {
oldPath
:
'
testold.abc
'
,
});
setImmediate
(()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.deleted .file-info
'
).
textContent
.
trim
()).
toContain
(
'
testold.abc
'
,
);
await
nextTick
();
expect
(
vm
.
$el
.
querySelector
(
'
.deleted .btn.btn-default
'
).
textContent
.
trim
()).
toContain
(
'
Download
'
,
);
expect
(
vm
.
$el
.
querySelector
(
'
.deleted .file-info
'
).
textContent
.
trim
()).
toContain
(
'
testold.abc
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.added .file-info
'
).
textContent
.
trim
()).
toContain
(
'
test.abc
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.added .btn.btn-default
'
).
textContent
.
trim
()).
toContain
(
'
Download
'
,
);
expect
(
vm
.
$el
.
querySelector
(
'
.deleted .btn.btn-default
'
).
textContent
.
trim
()).
toContain
(
'
Download
'
,
);
done
();
});
expect
(
vm
.
$el
.
querySelector
(
'
.added .file-info
'
).
textContent
.
trim
()).
toContain
(
'
test.abc
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.added .btn.btn-default
'
).
textContent
.
trim
()).
toContain
(
'
Download
'
,
);
});
describe
(
'
renamed file
'
,
()
=>
{
...
...
spec/frontend/vue_shared/components/diff_viewer/viewers/image_diff_viewer_spec.js
View file @
95f5d578
...
...
@@ -75,33 +75,29 @@ describe('ImageDiffViewer', () => {
expect
(
metaInfoElements
[
1
]).
toHaveText
(
'
1.00 KiB
'
);
});
it
(
'
renders image diff for new
'
,
(
done
)
=>
{
it
(
'
renders image diff for new
'
,
async
(
)
=>
{
createComponent
({
...
allProps
,
diffMode
:
'
new
'
,
oldPath
:
''
});
setImmediate
(()
=>
{
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
await
nextTick
();
expect
(
vm
.
$el
.
querySelector
(
'
.added img
'
).
getAttribute
(
'
src
'
)).
toBe
(
GREEN_BOX_IMAGE_URL
);
expect
(
metaInfoElement
).
toHaveText
(
'
1.00 KiB
'
);
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
done
(
);
}
);
expect
(
vm
.
$el
.
querySelector
(
'
.added img
'
).
getAttribute
(
'
src
'
)).
toBe
(
GREEN_BOX_IMAGE_URL
);
expect
(
metaInfoElement
).
toHaveText
(
'
1.00 KiB
'
);
});
it
(
'
renders image diff for deleted
'
,
(
done
)
=>
{
it
(
'
renders image diff for deleted
'
,
async
(
)
=>
{
createComponent
({
...
allProps
,
diffMode
:
'
deleted
'
,
newPath
:
''
});
setImmediate
(()
=>
{
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
await
nextTick
();
expect
(
vm
.
$el
.
querySelector
(
'
.deleted img
'
).
getAttribute
(
'
src
'
)).
toBe
(
RED_BOX_IMAGE_URL
);
expect
(
metaInfoElement
).
toHaveText
(
'
2.00 KiB
'
);
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
done
(
);
}
);
expect
(
vm
.
$el
.
querySelector
(
'
.deleted img
'
).
getAttribute
(
'
src
'
)).
toBe
(
RED_BOX_IMAGE_URL
);
expect
(
metaInfoElement
).
toHaveText
(
'
2.00 KiB
'
);
});
it
(
'
renders image diff for renamed
'
,
(
done
)
=>
{
it
(
'
renders image diff for renamed
'
,
async
(
)
=>
{
vm
=
new
Vue
({
components
:
{
imageDiffViewer
,
...
...
@@ -127,25 +123,21 @@ describe('ImageDiffViewer', () => {
`
),
}).
$mount
();
setImmediate
(()
=>
{
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
await
nextTick
();
expect
(
vm
.
$el
.
querySelector
(
'
img
'
).
getAttribute
(
'
src
'
)).
toBe
(
GREEN_BOX_IMAGE_URL
);
expect
(
vm
.
$el
.
querySelector
(
'
.overlay
'
)).
not
.
toBe
(
null
);
const
metaInfoElement
=
vm
.
$el
.
querySelector
(
'
.image-info
'
);
expect
(
metaInfoElement
).
toHaveText
(
'
2.00 KiB
'
);
expect
(
vm
.
$el
.
querySelector
(
'
img
'
).
getAttribute
(
'
src
'
)).
toBe
(
GREEN_BOX_IMAGE_URL
);
expect
(
vm
.
$el
.
querySelector
(
'
.overlay
'
)).
not
.
toBe
(
null
);
done
();
});
expect
(
metaInfoElement
).
toHaveText
(
'
2.00 KiB
'
);
});
describe
(
'
swipeMode
'
,
()
=>
{
beforeEach
((
done
)
=>
{
beforeEach
(()
=>
{
createComponent
({
...
requiredProps
});
setImmediate
(()
=>
{
done
();
});
return
nextTick
();
});
it
(
'
switches to Swipe Mode
'
,
async
()
=>
{
...
...
@@ -157,12 +149,10 @@ describe('ImageDiffViewer', () => {
});
describe
(
'
onionSkin
'
,
()
=>
{
beforeEach
((
done
)
=>
{
beforeEach
(()
=>
{
createComponent
({
...
requiredProps
});
setImmediate
(()
=>
{
done
();
});
return
nextTick
();
});
it
(
'
switches to Onion Skin Mode
'
,
async
()
=>
{
...
...
spec/frontend/vue_shared/components/file_finder/index_spec.js
View file @
95f5d578
import
Mousetrap
from
'
mousetrap
'
;
import
Vue
,
{
nextTick
}
from
'
vue
'
;
import
waitForPromises
from
'
helpers/wait_for_promises
'
;
import
{
file
}
from
'
jest/ide/helpers
'
;
import
{
UP_KEY_CODE
,
DOWN_KEY_CODE
,
ENTER_KEY_CODE
,
ESC_KEY_CODE
}
from
'
~/lib/utils/keycodes
'
;
import
FindFileComponent
from
'
~/vue_shared/components/file_finder/index.vue
'
;
...
...
@@ -31,7 +30,7 @@ describe('File finder item spec', () => {
});
describe
(
'
with entries
'
,
()
=>
{
beforeEach
((
done
)
=>
{
beforeEach
(()
=>
{
createComponent
({
files
:
[
{
...
...
@@ -48,7 +47,7 @@ describe('File finder item spec', () => {
],
});
setImmediate
(
done
);
return
nextTick
(
);
});
it
(
'
renders list of blobs
'
,
()
=>
{
...
...
@@ -57,68 +56,48 @@ describe('File finder item spec', () => {
expect
(
vm
.
$el
.
textContent
).
not
.
toContain
(
'
folder
'
);
});
it
(
'
filters entries
'
,
(
done
)
=>
{
it
(
'
filters entries
'
,
async
(
)
=>
{
vm
.
searchText
=
'
index
'
;
setImmediate
(()
=>
{
expect
(
vm
.
$el
.
textContent
).
toContain
(
'
index.js
'
);
expect
(
vm
.
$el
.
textContent
).
not
.
toContain
(
'
component.js
'
);
await
nextTick
();
done
(
);
}
);
expect
(
vm
.
$el
.
textContent
).
toContain
(
'
index.js
'
);
expect
(
vm
.
$el
.
textContent
).
not
.
toContain
(
'
component.js
'
);
});
it
(
'
shows clear button when searchText is not empty
'
,
(
done
)
=>
{
it
(
'
shows clear button when searchText is not empty
'
,
async
(
)
=>
{
vm
.
searchText
=
'
index
'
;
setImmediate
(()
=>
{
expect
(
vm
.
$el
.
querySelector
(
'
.dropdown-input
'
).
classList
).
toContain
(
'
has-value
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.dropdown-input-search
'
).
classList
).
toContain
(
'
hidden
'
);
await
nextTick
();
done
(
);
}
);
expect
(
vm
.
$el
.
querySelector
(
'
.dropdown-input
'
).
classList
).
toContain
(
'
has-value
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.dropdown-input-search
'
).
classList
).
toContain
(
'
hidden
'
);
});
it
(
'
clear button resets searchText
'
,
(
done
)
=>
{
it
(
'
clear button resets searchText
'
,
async
(
)
=>
{
vm
.
searchText
=
'
index
'
;
waitForPromises
()
.
then
(()
=>
{
vm
.
clearSearchInput
();
})
.
then
(
waitForPromises
)
.
then
(()
=>
{
expect
(
vm
.
searchText
).
toBe
(
''
);
})
.
then
(
done
)
.
catch
(
done
.
fail
);
vm
.
clearSearchInput
();
expect
(
vm
.
searchText
).
toBe
(
''
);
});
it
(
'
clear button focuses search input
'
,
(
done
)
=>
{
it
(
'
clear button focuses search input
'
,
async
(
)
=>
{
jest
.
spyOn
(
vm
.
$refs
.
searchInput
,
'
focus
'
).
mockImplementation
(()
=>
{});
vm
.
searchText
=
'
index
'
;
waitForPromises
()
.
then
(()
=>
{
vm
.
clearSearchInput
();
})
.
then
(
waitForPromises
)
.
then
(()
=>
{
expect
(
vm
.
$refs
.
searchInput
.
focus
).
toHaveBeenCalled
();
})
.
then
(
done
)
.
catch
(
done
.
fail
);
vm
.
clearSearchInput
();
await
nextTick
();
expect
(
vm
.
$refs
.
searchInput
.
focus
).
toHaveBeenCalled
();
});
describe
(
'
listShowCount
'
,
()
=>
{
it
(
'
returns 1 when no filtered entries exist
'
,
(
done
)
=>
{
it
(
'
returns 1 when no filtered entries exist
'
,
()
=>
{
vm
.
searchText
=
'
testing 123
'
;
setImmediate
(()
=>
{
expect
(
vm
.
listShowCount
).
toBe
(
1
);
done
();
});
expect
(
vm
.
listShowCount
).
toBe
(
1
);
});
it
(
'
returns entries length when not filtered
'
,
()
=>
{
...
...
@@ -131,26 +110,18 @@ describe('File finder item spec', () => {
expect
(
vm
.
listHeight
).
toBe
(
55
);
});
it
(
'
returns 33 when entries dont exist
'
,
(
done
)
=>
{
it
(
'
returns 33 when entries dont exist
'
,
()
=>
{
vm
.
searchText
=
'
testing 123
'
;
setImmediate
(()
=>
{
expect
(
vm
.
listHeight
).
toBe
(
33
);
done
();
});
expect
(
vm
.
listHeight
).
toBe
(
33
);
});
});
describe
(
'
filteredBlobsLength
'
,
()
=>
{
it
(
'
returns length of filtered blobs
'
,
(
done
)
=>
{
it
(
'
returns length of filtered blobs
'
,
()
=>
{
vm
.
searchText
=
'
index
'
;
setImmediate
(()
=>
{
expect
(
vm
.
filteredBlobsLength
).
toBe
(
1
);
done
();
});
expect
(
vm
.
filteredBlobsLength
).
toBe
(
1
);
});
});
...
...
@@ -158,7 +129,7 @@ describe('File finder item spec', () => {
it
(
'
renders less DOM nodes if not visible by utilizing v-if
'
,
async
()
=>
{
vm
.
visible
=
false
;
await
waitForPromises
();
await
nextTick
();
expect
(
vm
.
$el
).
toBeInstanceOf
(
Comment
);
});
...
...
@@ -166,33 +137,24 @@ describe('File finder item spec', () => {
describe
(
'
watches
'
,
()
=>
{
describe
(
'
searchText
'
,
()
=>
{
it
(
'
resets focusedIndex when updated
'
,
(
done
)
=>
{
it
(
'
resets focusedIndex when updated
'
,
async
(
)
=>
{
vm
.
focusedIndex
=
1
;
vm
.
searchText
=
'
test
'
;
setImmediate
(()
=>
{
expect
(
vm
.
focusedIndex
).
toBe
(
0
);
await
nextTick
();
done
();
});
expect
(
vm
.
focusedIndex
).
toBe
(
0
);
});
});
describe
(
'
visible
'
,
()
=>
{
it
(
'
resets searchText when changed to false
'
,
(
done
)
=>
{
it
(
'
resets searchText when changed to false
'
,
async
(
)
=>
{
vm
.
searchText
=
'
test
'
;
vm
.
visible
=
true
;
waitForPromises
()
.
then
(()
=>
{
vm
.
visible
=
false
;
})
.
then
(
waitForPromises
)
.
then
(()
=>
{
expect
(
vm
.
searchText
).
toBe
(
''
);
})
.
then
(
done
)
.
catch
(
done
.
fail
);
vm
.
visible
=
false
;
await
nextTick
();
expect
(
vm
.
searchText
).
toBe
(
''
);
});
});
});
...
...
@@ -216,7 +178,7 @@ describe('File finder item spec', () => {
});
describe
(
'
onKeyup
'
,
()
=>
{
it
(
'
opens file on enter key
'
,
(
done
)
=>
{
it
(
'
opens file on enter key
'
,
async
(
)
=>
{
const
event
=
new
CustomEvent
(
'
keyup
'
);
event
.
keyCode
=
ENTER_KEY_CODE
;
...
...
@@ -224,14 +186,12 @@ describe('File finder item spec', () => {
vm
.
$refs
.
searchInput
.
dispatchEvent
(
event
);
setImmediate
(()
=>
{
expect
(
vm
.
openFile
).
toHaveBeenCalledWith
(
vm
.
files
[
0
]);
await
nextTick
();
done
();
});
expect
(
vm
.
openFile
).
toHaveBeenCalledWith
(
vm
.
files
[
0
]);
});
it
(
'
closes file finder on esc key
'
,
(
done
)
=>
{
it
(
'
closes file finder on esc key
'
,
async
(
)
=>
{
const
event
=
new
CustomEvent
(
'
keyup
'
);
event
.
keyCode
=
ESC_KEY_CODE
;
...
...
@@ -239,11 +199,9 @@ describe('File finder item spec', () => {
vm
.
$refs
.
searchInput
.
dispatchEvent
(
event
);
setImmediate
(()
=>
{
expect
(
vm
.
$emit
).
toHaveBeenCalledWith
(
'
toggle
'
,
false
);
await
nextTick
();
done
();
});
expect
(
vm
.
$emit
).
toHaveBeenCalledWith
(
'
toggle
'
,
false
);
});
});
...
...
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