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
0
Merge Requests
0
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
Léo-Paul Géneau
gitlab-ce
Commits
743add97
Commit
743add97
authored
Sep 03, 2018
by
Winnie Hellmann
Committed by
Phil Hughes
Sep 03, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move badge settings to general settings
parent
c0625e5d
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
242 additions
and
172 deletions
+242
-172
app/assets/javascripts/badges/components/badge_form.vue
app/assets/javascripts/badges/components/badge_form.vue
+67
-38
app/assets/javascripts/badges/components/badge_list.vue
app/assets/javascripts/badges/components/badge_list.vue
+1
-1
app/assets/javascripts/badges/components/badge_list_row.vue
app/assets/javascripts/badges/components/badge_list_row.vue
+5
-5
app/assets/javascripts/pages/groups/edit/index.js
app/assets/javascripts/pages/groups/edit/index.js
+3
-4
app/assets/javascripts/pages/projects/edit/index.js
app/assets/javascripts/pages/projects/edit/index.js
+3
-0
app/assets/javascripts/pages/projects/settings/badges/index/index.js
...javascripts/pages/projects/settings/badges/index/index.js
+0
-10
app/controllers/groups/settings/badges_controller.rb
app/controllers/groups/settings/badges_controller.rb
+0
-13
app/controllers/groups_controller.rb
app/controllers/groups_controller.rb
+2
-0
app/controllers/projects/settings/badges_controller.rb
app/controllers/projects/settings/badges_controller.rb
+0
-13
app/controllers/projects_controller.rb
app/controllers/projects_controller.rb
+2
-0
app/views/groups/edit.html.haml
app/views/groups/edit.html.haml
+12
-0
app/views/layouts/nav/sidebar/_group.html.haml
app/views/layouts/nav/sidebar/_group.html.haml
+0
-6
app/views/layouts/nav/sidebar/_project.html.haml
app/views/layouts/nav/sidebar/_project.html.haml
+0
-5
app/views/projects/edit.html.haml
app/views/projects/edit.html.haml
+12
-0
changelogs/unreleased/winh-move-badge-settings.yml
changelogs/unreleased/winh-move-badge-settings.yml
+5
-0
config/routes/group.rb
config/routes/group.rb
+0
-1
config/routes/project.rb
config/routes/project.rb
+0
-1
doc/user/project/badges.md
doc/user/project/badges.md
+2
-2
locale/gitlab.pot
locale/gitlab.pot
+24
-0
spec/controllers/groups_controller_spec.rb
spec/controllers/groups_controller_spec.rb
+10
-0
spec/controllers/projects_controller_spec.rb
spec/controllers/projects_controller_spec.rb
+13
-0
spec/features/groups/settings/group_badges_spec.rb
spec/features/groups/settings/group_badges_spec.rb
+1
-1
spec/features/projects/settings/project_badges_spec.rb
spec/features/projects/settings/project_badges_spec.rb
+1
-1
spec/javascripts/badges/components/badge_form_spec.js
spec/javascripts/badges/components/badge_form_spec.js
+79
-71
No files found.
app/assets/javascripts/badges/components/badge_form.vue
View file @
743add97
...
...
@@ -23,6 +23,11 @@ export default {
required
:
true
,
},
},
data
()
{
return
{
wasValidated
:
false
,
};
},
computed
:
{
...
mapState
([
'
badgeInAddForm
'
,
...
...
@@ -39,16 +44,6 @@ export default {
return
this
.
badgeInAddForm
;
},
canSubmit
()
{
return
(
this
.
badge
!==
null
&&
this
.
badge
.
imageUrl
&&
this
.
badge
.
imageUrl
.
trim
()
!==
''
&&
this
.
badge
.
linkUrl
&&
this
.
badge
.
linkUrl
.
trim
()
!==
''
&&
!
this
.
isSaving
);
},
helpText
()
{
const
placeholders
=
[
'
project_path
'
,
'
project_id
'
,
'
default_branch
'
,
'
commit_sha
'
]
.
map
(
placeholder
=>
`<code>%{
${
placeholder
}
}</code>`
)
...
...
@@ -93,11 +88,18 @@ export default {
});
},
},
submitButtonLabel
()
{
if
(
this
.
isEditing
)
{
return
s__
(
'
Badges|Save changes
'
);
}
return
s__
(
'
Badges|Add badge
'
);
badgeImageUrlExample
()
{
const
exampleUrl
=
'
https://example.gitlab.com/%{project_path}/badges/%{default_branch}/badge.svg
'
;
return
sprintf
(
s__
(
'
Badges|e.g. %{exampleUrl}
'
),
{
exampleUrl
,
});
},
badgeLinkUrlExample
()
{
const
exampleUrl
=
'
https://example.gitlab.com/%{project_path}
'
;
return
sprintf
(
s__
(
'
Badges|e.g. %{exampleUrl}
'
),
{
exampleUrl
,
});
},
},
methods
:
{
...
...
@@ -109,7 +111,9 @@ export default {
this
.
stopEditing
();
},
onSubmit
()
{
if
(
!
this
.
canSubmit
)
{
const
form
=
this
.
$el
;
if
(
!
form
.
checkValidity
())
{
this
.
wasValidated
=
true
;
return
Promise
.
resolve
();
}
...
...
@@ -117,6 +121,7 @@ export default {
return
this
.
saveBadge
()
.
then
(()
=>
{
createFlash
(
s__
(
'
Badges|The badge was saved.
'
),
'
notice
'
);
this
.
wasValidated
=
false
;
})
.
catch
(
error
=>
{
createFlash
(
...
...
@@ -129,6 +134,7 @@ export default {
return
this
.
addBadge
()
.
then
(()
=>
{
createFlash
(
s__
(
'
Badges|A new badge was added.
'
),
'
notice
'
);
this
.
wasValidated
=
false
;
})
.
catch
(
error
=>
{
createFlash
(
...
...
@@ -138,47 +144,58 @@ export default {
});
},
},
badgeImageUrlPlaceholder
:
'
https://example.gitlab.com/%{project_path}/badges/%{default_branch}/<badge>.svg
'
,
badgeLinkUrlPlaceholder
:
'
https://example.gitlab.com/%{project_path}
'
,
};
</
script
>
<
template
>
<form
class=
"prepend-top-default append-bottom-default"
:class=
"
{ 'was-validated': wasValidated }"
class="prepend-top-default append-bottom-default needs-validation"
novalidate
@submit.prevent.stop="onSubmit"
>
<div
class=
"form-group"
>
<label
for=
"badge-link-url"
>
{{
s__
(
'
Badges|Link
'
)
}}
</label>
<label
for=
"badge-link-url"
class=
"label-bold"
>
{{
s__
(
'
Badges|Link
'
)
}}
</label>
<p
v-html=
"helpText"
></p>
<input
id=
"badge-link-url"
v-model=
"linkUrl"
:placeholder=
"$options.badgeLinkUrlPlaceholder"
type=
"text"
type=
"URL"
class=
"form-control"
required
@
input=
"debouncedPreview"
/>
<span
class=
"form-text text-muted"
v-html=
"helpText"
></span>
<div
class=
"invalid-feedback"
>
{{
s__
(
'
Badges|Please fill in a valid URL
'
)
}}
</div>
<span
class=
"form-text text-muted"
>
{{
badgeLinkUrlExample
}}
</span>
</div>
<div
class=
"form-group"
>
<label
for=
"badge-image-url"
>
{{
s__
(
'
Badges|Badge image URL
'
)
}}
</label>
<label
for=
"badge-image-url"
class=
"label-bold"
>
{{
s__
(
'
Badges|Badge image URL
'
)
}}
</label>
<p
v-html=
"helpText"
></p>
<input
id=
"badge-image-url"
v-model=
"imageUrl"
:placeholder=
"$options.badgeImageUrlPlaceholder"
type=
"text"
type=
"URL"
class=
"form-control"
required
@
input=
"debouncedPreview"
/>
<span
class=
"form-text text-muted"
v-html=
"helpText"
></span>
<div
class=
"invalid-feedback"
>
{{
s__
(
'
Badges|Please fill in a valid URL
'
)
}}
</div>
<span
class=
"form-text text-muted"
>
{{
badgeImageUrlExample
}}
</span>
</div>
<div
class=
"form-group"
>
...
...
@@ -200,20 +217,32 @@ export default {
>
{{
s__
(
'
Badges|No image to preview
'
)
}}
</p>
</div>
<div
class=
"row-content-block"
>
<div
v-if=
"isEditing"
class=
"row-content-block"
>
<loading-button
:disabled=
"!canSubmit"
:loading=
"isSaving"
:label=
"s
ubmitButtonLabel
"
:label=
"s
__('Badges|Save changes')
"
type=
"submit"
container-class=
"btn btn-success"
/>
<button
v-if=
"isEditing"
class=
"btn btn-cancel"
type=
"button"
@
click=
"onCancel"
>
{{
__
(
'
Cancel
'
)
}}
</button>
</div>
<div
v-else
class=
"form-group"
>
<loading-button
:loading=
"isSaving"
:label=
"s__('Badges|Add badge')"
type=
"submit"
container-class=
"btn btn-success"
/>
</div>
</form>
</
template
>
app/assets/javascripts/badges/components/badge_list.vue
View file @
743add97
...
...
@@ -28,7 +28,7 @@ export default {
{{
s__
(
'
Badges|Your badges
'
)
}}
<span
v-show=
"!isLoading"
class=
"badge"
class=
"badge
badge-pill
"
>
{{
badges
.
length
}}
</span>
</div>
<loading-icon
...
...
app/assets/javascripts/badges/components/badge_list_row.vue
View file @
743add97
...
...
@@ -43,13 +43,13 @@ export default {
<badge
:image-url=
"badge.renderedImageUrl"
:link-url=
"badge.renderedLinkUrl"
class=
"table-section section-
3
0"
class=
"table-section section-
4
0"
/>
<span
class=
"table-section section-
5
0 str-truncated"
>
{{
badge
.
linkUrl
}}
</span>
<div
class=
"table-section section-1
0
"
>
<span
class=
"badge"
>
{{
badgeKindText
}}
</span>
<span
class=
"table-section section-
3
0 str-truncated"
>
{{
badge
.
linkUrl
}}
</span>
<div
class=
"table-section section-1
5
"
>
<span
class=
"badge
badge-pill
"
>
{{
badgeKindText
}}
</span>
</div>
<div
class=
"table-section section-1
0
table-button-footer"
>
<div
class=
"table-section section-1
5
table-button-footer"
>
<div
v-if=
"canEditBadge"
class=
"table-action-buttons"
>
...
...
app/assets/javascripts/pages/groups/edit/index.js
View file @
743add97
...
...
@@ -2,14 +2,13 @@ import groupAvatar from '~/group_avatar';
import
TransferDropdown
from
'
~/groups/transfer_dropdown
'
;
import
initConfirmDangerModal
from
'
~/confirm_danger_modal
'
;
import
initSettingsPanels
from
'
~/settings_panels
'
;
import
mountBadgeSettings
from
'
~/pages/shared/mount_badge_settings
'
;
import
{
GROUP_BADGE
}
from
'
~/badges/constants
'
;
document
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
{
groupAvatar
();
new
TransferDropdown
();
// eslint-disable-line no-new
initConfirmDangerModal
();
});
document
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
{
// Initialize expandable settings panels
initSettingsPanels
();
mountBadgeSettings
(
GROUP_BADGE
);
});
app/assets/javascripts/pages/projects/edit/index.js
View file @
743add97
import
{
PROJECT_BADGE
}
from
'
~/badges/constants
'
;
import
initSettingsPanels
from
'
~/settings_panels
'
;
import
setupProjectEdit
from
'
~/project_edit
'
;
import
initConfirmDangerModal
from
'
~/confirm_danger_modal
'
;
import
mountBadgeSettings
from
'
~/pages/shared/mount_badge_settings
'
;
import
initProjectLoadingSpinner
from
'
../shared/save_project_loader
'
;
import
projectAvatar
from
'
../shared/project_avatar
'
;
import
initProjectPermissionsSettings
from
'
../shared/permissions
'
;
...
...
@@ -13,4 +15,5 @@ document.addEventListener('DOMContentLoaded', () => {
projectAvatar
();
initProjectPermissionsSettings
();
initConfirmDangerModal
();
mountBadgeSettings
(
PROJECT_BADGE
);
});
app/assets/javascripts/pages/projects/settings/badges/index/index.js
deleted
100644 → 0
View file @
c0625e5d
import
Vue
from
'
vue
'
;
import
Translate
from
'
~/vue_shared/translate
'
;
import
{
PROJECT_BADGE
}
from
'
~/badges/constants
'
;
import
mountBadgeSettings
from
'
~/pages/shared/mount_badge_settings
'
;
Vue
.
use
(
Translate
);
document
.
addEventListener
(
'
DOMContentLoaded
'
,
()
=>
{
mountBadgeSettings
(
PROJECT_BADGE
);
});
app/controllers/groups/settings/badges_controller.rb
deleted
100644 → 0
View file @
c0625e5d
module
Groups
module
Settings
class
BadgesController
<
Groups
::
ApplicationController
include
API
::
Helpers
::
RelatedResourcesHelpers
before_action
:authorize_admin_group!
def
index
@badge_api_endpoint
=
expose_url
(
api_v4_groups_badges_path
(
id:
@group
.
id
))
end
end
end
end
app/controllers/groups_controller.rb
View file @
743add97
class
GroupsController
<
Groups
::
ApplicationController
include
API
::
Helpers
::
RelatedResourcesHelpers
include
IssuesAction
include
MergeRequestsAction
include
ParamsBackwardCompatibility
...
...
@@ -77,6 +78,7 @@ class GroupsController < Groups::ApplicationController
end
def
edit
@badge_api_endpoint
=
expose_url
(
api_v4_groups_badges_path
(
id:
@group
.
id
))
end
def
projects
...
...
app/controllers/projects/settings/badges_controller.rb
deleted
100644 → 0
View file @
c0625e5d
module
Projects
module
Settings
class
BadgesController
<
Projects
::
ApplicationController
include
API
::
Helpers
::
RelatedResourcesHelpers
before_action
:authorize_admin_project!
def
index
@badge_api_endpoint
=
expose_url
(
api_v4_projects_badges_path
(
id:
@project
.
id
))
end
end
end
end
app/controllers/projects_controller.rb
View file @
743add97
class
ProjectsController
<
Projects
::
ApplicationController
include
API
::
Helpers
::
RelatedResourcesHelpers
include
IssuableCollections
include
ExtractsPath
include
PreviewMarkdown
...
...
@@ -32,6 +33,7 @@ class ProjectsController < Projects::ApplicationController
end
def
edit
@badge_api_endpoint
=
expose_url
(
api_v4_projects_badges_path
(
id:
@project
.
id
))
render
'edit'
end
...
...
app/views/groups/edit.html.haml
View file @
743add97
...
...
@@ -25,6 +25,18 @@
.settings-content
=
render
'groups/settings/permissions'
%section
.settings.no-animate
{
class:
(
'expanded'
if
expanded
)
}
.settings-header
%h4
=
s_
(
'GroupSettings|Badges'
)
%button
.btn.js-settings-toggle
{
type:
'button'
}
=
expanded
?
'Collapse'
:
'Expand'
%p
=
s_
(
'GroupSettings|Customize your group badges.'
)
=
link_to
s_
(
'GroupSettings|Learn more about badges.'
),
help_page_path
(
'user/project/badges'
)
.settings-content
=
render
'shared/badges/badge_settings'
%section
.settings.gs-advanced.no-animate
#js-advanced-settings
{
class:
(
'expanded'
if
expanded
)
}
.settings-header
%h4
...
...
app/views/layouts/nav/sidebar/_group.html.haml
View file @
743add97
...
...
@@ -122,12 +122,6 @@
%span
=
_
(
'General'
)
=
nav_link
(
controller: :badges
)
do
=
link_to
group_settings_badges_path
(
@group
),
title:
_
(
'Project Badges'
)
do
%span
=
_
(
'Project Badges'
)
=
nav_link
(
path:
'groups#projects'
)
do
=
link_to
projects_group_path
(
@group
),
title:
_
(
'Projects'
)
do
%span
...
...
app/views/layouts/nav/sidebar/_project.html.haml
View file @
743add97
...
...
@@ -312,11 +312,6 @@
=
link_to
project_project_members_path
(
@project
),
title:
_
(
'Members'
)
do
%span
=
_
(
'Members'
)
-
if
can_edit
=
nav_link
(
controller: :badges
)
do
=
link_to
project_settings_badges_path
(
@project
),
title:
_
(
'Badges'
)
do
%span
=
_
(
'Badges'
)
-
if
can_edit
=
nav_link
(
controller:
[
:integrations
,
:services
,
:hooks
,
:hook_logs
])
do
=
link_to
project_settings_integrations_path
(
@project
),
title:
_
(
'Integrations'
)
do
...
...
app/views/projects/edit.html.haml
View file @
743add97
...
...
@@ -102,6 +102,18 @@
=
render_if_exists
'projects/service_desk_settings'
%section
.settings.no-animate
{
class:
(
'expanded'
if
expanded
)
}
.settings-header
%h4
=
s_
(
'ProjectSettings|Badges'
)
%button
.btn.js-settings-toggle
{
type:
'button'
}
=
expanded
?
'Collapse'
:
'Expand'
%p
=
s_
(
'ProjectSettings|Customize your project badges.'
)
=
link_to
s_
(
'ProjectSettings|Learn more about badges.'
),
help_page_path
(
'user/project/badges'
)
.settings-content
=
render
'shared/badges/badge_settings'
=
render
'export'
,
project:
@project
%section
.qa-advanced-settings.settings.advanced-settings.no-animate
#js-project-advanced-settings
{
class:
(
'expanded'
if
expanded
)
}
...
...
changelogs/unreleased/winh-move-badge-settings.yml
0 → 100644
View file @
743add97
---
title
:
Move badge settings to general settings
merge_request
:
21333
author
:
type
:
changed
config/routes/group.rb
View file @
743add97
...
...
@@ -25,7 +25,6 @@ constraints(::Constraints::GroupUrlConstrainer.new) do
constraints:
{
group_id:
Gitlab
::
PathRegex
.
full_namespace_route_regex
})
do
namespace
:settings
do
resource
:ci_cd
,
only:
[
:show
],
controller:
'ci_cd'
resources
:badges
,
only:
[
:index
]
end
resource
:variables
,
only:
[
:show
,
:update
]
...
...
config/routes/project.rb
View file @
743add97
...
...
@@ -442,7 +442,6 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do
resource
:repository
,
only:
[
:show
],
controller: :repository
do
post
:create_deploy_token
,
path:
'deploy_token/create'
end
resources
:badges
,
only:
[
:index
]
end
# Since both wiki and repository routing contains wildcard characters
...
...
doc/user/project/badges.md
View file @
743add97
...
...
@@ -17,7 +17,7 @@ If you find that you have to add the same badges to several projects, you may wa
To add a new badge to a project:
1.
Navigate to your project's
**Settings > Badges**
.
1.
Navigate to your project's
**Settings >
General >
Badges**
.
1.
Under "Link", enter the URL that the badges should point to and under
"Badge image URL" the URL of the image that should be displayed.
1.
Submit the badge by clicking the
**Add badge**
button.
...
...
@@ -39,7 +39,7 @@ project, consider adding them on the [project level](#project-badges) or use
To add a new badge to a group:
1.
Navigate to your group's
**Settings >
Project
Badges**
.
1.
Navigate to your group's
**Settings >
General >
Badges**
.
1.
Under "Link", enter the URL that the badges should point to and under
"Badge image URL" the URL of the image that should be displayed.
1.
Submit the badge by clicking the
**Add badge**
button.
...
...
locale/gitlab.pot
View file @
743add97
...
...
@@ -805,6 +805,9 @@ msgstr ""
msgid "Badges|No image to preview"
msgstr ""
msgid "Badges|Please fill in a valid URL"
msgstr ""
msgid "Badges|Project Badge"
msgstr ""
...
...
@@ -838,6 +841,9 @@ msgstr ""
msgid "Badges|Your badges"
msgstr ""
msgid "Badges|e.g. %{exampleUrl}"
msgstr ""
msgid "Begin with the selected commit"
msgstr ""
...
...
@@ -2897,6 +2903,15 @@ msgstr ""
msgid "Group: %{group_name}"
msgstr ""
msgid "GroupSettings|Badges"
msgstr ""
msgid "GroupSettings|Customize your group badges."
msgstr ""
msgid "GroupSettings|Learn more about badges."
msgstr ""
msgid "GroupSettings|Prevent sharing a project within %{group} with other groups"
msgstr ""
...
...
@@ -4536,6 +4551,15 @@ msgstr ""
msgid "ProjectPage|Project ID: %{project_id}"
msgstr ""
msgid "ProjectSettings|Badges"
msgstr ""
msgid "ProjectSettings|Customize your project badges."
msgstr ""
msgid "ProjectSettings|Learn more about badges."
msgstr ""
msgid "Projects"
msgstr ""
...
...
spec/controllers/groups_controller_spec.rb
View file @
743add97
...
...
@@ -57,6 +57,16 @@ describe GroupsController do
end
end
describe
'GET edit'
do
it
'sets the badge API endpoint'
do
sign_in
(
owner
)
get
:edit
,
id:
group
.
to_param
expect
(
assigns
(
:badge_api_endpoint
)).
not_to
be_nil
end
end
describe
'GET #new'
do
context
'when creating subgroups'
,
:nested_groups
do
[
true
,
false
].
each
do
|
can_create_group_status
|
...
...
spec/controllers/projects_controller_spec.rb
View file @
743add97
...
...
@@ -284,6 +284,19 @@ describe ProjectsController do
end
end
describe
'GET edit'
do
it
'sets the badge API endpoint'
do
sign_in
(
user
)
project
.
add_maintainer
(
user
)
get
:edit
,
namespace_id:
project
.
namespace
.
path
,
id:
project
.
path
expect
(
assigns
(
:badge_api_endpoint
)).
not_to
be_nil
end
end
describe
"#update"
do
render_views
...
...
spec/features/groups/settings/group_badges_spec.rb
View file @
743add97
...
...
@@ -14,7 +14,7 @@ describe 'Group Badges' do
group
.
add_owner
(
user
)
sign_in
(
user
)
visit
(
group_settings_badges
_path
(
group
))
visit
(
edit_group
_path
(
group
))
end
it
'shows a list of badges'
,
:js
do
...
...
spec/features/projects/settings/project_badges_spec.rb
View file @
743add97
...
...
@@ -15,7 +15,7 @@ describe 'Project Badges' do
group
.
add_maintainer
(
user
)
sign_in
(
user
)
visit
(
project_settings_badges
_path
(
project
))
visit
(
edit_project
_path
(
project
))
end
it
'shows a list of badges'
,
:js
do
...
...
spec/javascripts/badges/components/badge_form_spec.js
View file @
743add97
import
Vue
from
'
vue
'
;
import
MockAdapter
from
'
axios-mock-adapter
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
store
from
'
~/badges/store
'
;
import
createEmptyBadge
from
'
~/badges/empty_badge
'
;
import
BadgeForm
from
'
~/badges/components/badge_form.vue
'
;
import
{
mountComponentWithStore
}
from
'
spec/helpers/vue_mount_component_helper
'
;
import
{
createDummyBadge
}
from
'
../dummy_badge
'
;
import
{
DUMMY_IMAGE_URL
,
TEST_HOST
}
from
'
../../test_constants
'
;
// avoid preview background process
BadgeForm
.
methods
.
debouncedPreview
=
()
=>
{};
describe
(
'
BadgeForm component
'
,
()
=>
{
const
Component
=
Vue
.
extend
(
BadgeForm
);
let
axiosMock
;
let
vm
;
beforeEach
(()
=>
{
setFixtures
(
`
<div id="dummy-element"></div>
`
);
axiosMock
=
new
MockAdapter
(
axios
);
});
afterEach
(()
=>
{
vm
.
$destroy
();
axiosMock
.
restore
();
});
describe
(
'
methods
'
,
()
=>
{
...
...
@@ -38,93 +48,86 @@ describe('BadgeForm component', () => {
expect
(
vm
.
stopEditing
).
toHaveBeenCalled
();
});
});
});
describe
(
'
onSubmit
'
,
()
=>
{
describe
(
'
if isEditing is true
'
,
()
=>
{
beforeEach
(()
=>
{
spyOn
(
vm
,
'
saveBadge
'
).
and
.
returnValue
(
Promise
.
resolve
());
store
.
replaceState
({
...
store
.
state
,
isSaving
:
false
,
badgeInEditForm
:
createDummyBadge
(),
});
vm
.
isEditing
=
true
;
});
it
(
'
returns immediately if imageUrl is empty
'
,
()
=>
{
store
.
state
.
badgeInEditForm
.
imageUrl
=
''
;
vm
.
onSubmit
();
expect
(
vm
.
saveBadge
).
not
.
toHaveBeenCalled
();
});
it
(
'
returns immediately if linkUrl is empty
'
,
()
=>
{
store
.
state
.
badgeInEditForm
.
linkUrl
=
''
;
vm
.
onSubmit
();
expect
(
vm
.
saveBadge
).
not
.
toHaveBeenCalled
();
});
it
(
'
returns immediately if isSaving is true
'
,
()
=>
{
store
.
state
.
isSaving
=
true
;
const
sharedSubmitTests
=
submitAction
=>
{
const
imageUrlSelector
=
'
#badge-image-url
'
;
const
findImageUrlElement
=
()
=>
vm
.
$el
.
querySelector
(
imageUrlSelector
);
const
linkUrlSelector
=
'
#badge-link-url
'
;
const
findLinkUrlElement
=
()
=>
vm
.
$el
.
querySelector
(
linkUrlSelector
);
const
setValue
=
(
inputElementSelector
,
url
)
=>
{
const
inputElement
=
vm
.
$el
.
querySelector
(
inputElementSelector
);
inputElement
.
value
=
url
;
inputElement
.
dispatchEvent
(
new
Event
(
'
input
'
));
};
const
submitForm
=
()
=>
{
const
submitButton
=
vm
.
$el
.
querySelector
(
'
button[type="submit"]
'
);
submitButton
.
click
();
};
const
expectInvalidInput
=
inputElementSelector
=>
{
const
inputElement
=
vm
.
$el
.
querySelector
(
inputElementSelector
);
expect
(
inputElement
).
toBeMatchedBy
(
'
:invalid
'
);
const
feedbackElement
=
vm
.
$el
.
querySelector
(
`
${
inputElementSelector
}
+ .invalid-feedback`
);
expect
(
feedbackElement
).
toBeVisible
();
};
vm
.
onSubmit
();
beforeEach
(()
=>
{
spyOn
(
vm
,
submitAction
).
and
.
returnValue
(
Promise
.
resolve
());
store
.
replaceState
({
...
store
.
state
,
badgeInAddForm
:
createEmptyBadge
(),
badgeInEditForm
:
createEmptyBadge
(),
isSaving
:
false
,
});
expect
(
vm
.
saveBadge
).
not
.
toHaveBeenCalled
();
});
setValue
(
linkUrlSelector
,
`
${
TEST_HOST
}
/link/url`
);
setValue
(
imageUrlSelector
,
`
${
window
.
location
.
origin
}${
DUMMY_IMAGE_URL
}
`
);
});
it
(
'
calls saveBadge
'
,
()
=>
{
vm
.
onSubmit
(
);
it
(
'
returns immediately if imageUrl is empty
'
,
()
=>
{
setValue
(
imageUrlSelector
,
''
);
expect
(
vm
.
saveBadge
).
toHaveBeenCalled
();
});
});
submitForm
();
describe
(
'
if isEditing is false
'
,
()
=>
{
beforeEach
(()
=>
{
spyOn
(
vm
,
'
addBadge
'
).
and
.
returnValue
(
Promise
.
resolve
());
store
.
replaceState
({
...
store
.
state
,
isSaving
:
false
,
badgeInAddForm
:
createDummyBadge
(),
});
vm
.
isEditing
=
false
;
});
expectInvalidInput
(
imageUrlSelector
);
expect
(
vm
[
submitAction
]).
not
.
toHaveBeenCalled
();
});
it
(
'
returns immediately if imageUrl is empty
'
,
()
=>
{
store
.
state
.
badgeInAddForm
.
imageUrl
=
''
;
it
(
'
returns immediately if imageUrl is malformed
'
,
()
=>
{
setValue
(
imageUrlSelector
,
'
not-a-url
'
)
;
vm
.
onSubmit
();
submitForm
();
expect
(
vm
.
addBadge
).
not
.
toHaveBeenCalled
();
});
expectInvalidInput
(
imageUrlSelector
);
expect
(
vm
[
submitAction
]).
not
.
toHaveBeenCalled
();
});
it
(
'
returns immediately if linkUrl is empty
'
,
()
=>
{
store
.
state
.
badgeInAddForm
.
linkUrl
=
''
;
it
(
'
returns immediately if linkUrl is empty
'
,
()
=>
{
setValue
(
linkUrlSelector
,
''
)
;
vm
.
onSubmit
();
submitForm
();
expect
(
vm
.
addBadge
).
not
.
toHaveBeenCalled
();
});
expectInvalidInput
(
linkUrlSelector
);
expect
(
vm
[
submitAction
]).
not
.
toHaveBeenCalled
();
});
it
(
'
returns immediately if isSaving is true
'
,
()
=>
{
store
.
state
.
isSaving
=
true
;
it
(
'
returns immediately if linkUrl is malformed
'
,
()
=>
{
setValue
(
linkUrlSelector
,
'
not-a-url
'
)
;
vm
.
onSubmit
();
submitForm
();
expect
(
vm
.
addBadge
).
not
.
toHaveBeenCalled
();
});
expectInvalidInput
(
linkUrlSelector
);
expect
(
vm
[
submitAction
]).
not
.
toHaveBeenCalled
();
});
it
(
'
calls addBadge
'
,
()
=>
{
vm
.
onSubmit
();
it
(
`calls
${
submitAction
}
`
,
()
=>
{
submitForm
();
expect
(
vm
.
addBadge
).
toHaveBeenCalled
(
);
}
);
}
);
expect
(
findImageUrlElement
()).
toBeMatchedBy
(
'
:valid
'
);
expect
(
findLinkUrlElement
()).
toBeMatchedBy
(
'
:valid
'
);
expect
(
vm
[
submitAction
]).
toHaveBeenCalled
(
);
});
}
)
;
};
describe
(
'
if isEditing is false
'
,
()
=>
{
beforeEach
(()
=>
{
...
...
@@ -138,12 +141,15 @@ describe('BadgeForm component', () => {
});
it
(
'
renders one button
'
,
()
=>
{
const
buttons
=
vm
.
$el
.
querySelectorAll
(
'
.row-content-block button
'
);
expect
(
vm
.
$el
.
querySelector
(
'
.row-content-block
'
)).
toBeNull
();
const
buttons
=
vm
.
$el
.
querySelectorAll
(
'
.form-group:last-of-type button
'
);
expect
(
buttons
.
length
).
toBe
(
1
);
const
buttonAddElement
=
buttons
[
0
];
expect
(
buttonAddElement
).
toBeVisible
();
expect
(
buttonAddElement
).
toHaveText
(
'
Add badge
'
);
});
sharedSubmitTests
(
'
addBadge
'
);
});
describe
(
'
if isEditing is true
'
,
()
=>
{
...
...
@@ -167,5 +173,7 @@ describe('BadgeForm component', () => {
expect
(
buttonCancelElement
).
toBeVisible
();
expect
(
buttonCancelElement
).
toHaveText
(
'
Cancel
'
);
});
sharedSubmitTests
(
'
saveBadge
'
);
});
});
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