Commit f23ffeece741caaf5e50002c4dca23a914480331
Exists in
spb-stable
and in
3 other branches
Merge branch '6-5-dev'
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Conflicts: VERSION
Showing
29 changed files
with
327 additions
and
64 deletions
Show diff stats
CHANGELOG
VERSION
app/assets/javascripts/admin.js.coffee
... | ... | @@ -8,6 +8,23 @@ class Admin |
8 | 8 | else |
9 | 9 | elems.removeAttr 'disabled' |
10 | 10 | |
11 | + $('body').on 'click', '.js-toggle-colors-link', (e) -> | |
12 | + e.preventDefault() | |
13 | + $('.js-toggle-colors-link').hide() | |
14 | + $('.js-toggle-colors-container').show() | |
15 | + | |
16 | + $('input#broadcast_message_color').on 'input', -> | |
17 | + previewColor = $('input#broadcast_message_color').val() | |
18 | + $('div.broadcast-message-preview').css('background-color', previewColor) | |
19 | + | |
20 | + $('input#broadcast_message_font').on 'input', -> | |
21 | + previewColor = $('input#broadcast_message_font').val() | |
22 | + $('div.broadcast-message-preview').css('color', previewColor) | |
23 | + | |
24 | + $('textarea#broadcast_message_message').on 'input', -> | |
25 | + previewMessage = $('textarea#broadcast_message_message').val() | |
26 | + $('div.broadcast-message-preview span').text(previewMessage) | |
27 | + | |
11 | 28 | $('.log-tabs a').click (e) -> |
12 | 29 | e.preventDefault() |
13 | 30 | $(this).tab('show') | ... | ... |
app/assets/javascripts/issues.js.coffee
... | ... | @@ -79,3 +79,9 @@ |
79 | 79 | $("#update_issues_ids").val [] |
80 | 80 | $(".issues_bulk_update").hide() |
81 | 81 | $(".issues-filters").show() |
82 | + | |
83 | +$ -> | |
84 | + $('.edit-issue.inline-update input[type="submit"]').hide(); | |
85 | + $("body").on "change", ".edit-issue.inline-update select", -> | |
86 | + $(this).submit() | |
87 | + | ... | ... |
app/assets/stylesheets/common.scss
app/assets/stylesheets/gitlab_bootstrap/common.scss
... | ... | @@ -106,13 +106,11 @@ pre.well-pre { |
106 | 106 | /** Big Labels **/ |
107 | 107 | .state-label { |
108 | 108 | font-size: 14px; |
109 | - padding: 5px 15px; | |
109 | + padding: 6px 25px; | |
110 | 110 | text-align: center; |
111 | - float: right; | |
112 | - position: relative; | |
113 | - top: -5px; | |
114 | 111 | @include border-radius(4px); |
115 | 112 | text-shadow: none; |
113 | + margin-left: 10px; | |
116 | 114 | |
117 | 115 | &.state-label-green { |
118 | 116 | background: #4A4; | ... | ... |
app/assets/stylesheets/sections/issues.scss
... | ... | @@ -119,3 +119,16 @@ input.check_all_issues { |
119 | 119 | background-color: #f4f4f4; |
120 | 120 | } |
121 | 121 | } |
122 | + | |
123 | +.edit-issue.inline-update select { | |
124 | + width: 100%; | |
125 | + max-width: 200px; | |
126 | +} | |
127 | + | |
128 | +.issue-show-labels .label { | |
129 | + padding: 6px 10px; | |
130 | +} | |
131 | + | |
132 | +form.edit-issue { | |
133 | + margin: 0; | |
134 | +} | ... | ... |
app/assets/stylesheets/selects.scss
app/helpers/issues_helper.rb
... | ... | @@ -76,4 +76,12 @@ module IssuesHelper |
76 | 76 | def bulk_update_assignee_options |
77 | 77 | options_for_select(["None (unassigned)", nil]) + options_from_collection_for_select(@project.team.members, "id", "name", params[:assignee_id]) |
78 | 78 | end |
79 | + | |
80 | + def assignee_options object | |
81 | + options_from_collection_for_select(@project.team.members.sort_by(&:name), 'id', 'name', object.assignee_id) | |
82 | + end | |
83 | + | |
84 | + def milestone_options object | |
85 | + options_from_collection_for_select(@project.milestones.active, 'id', 'title', object.milestone_id) | |
86 | + end | |
79 | 87 | end | ... | ... |
app/models/broadcast_message.rb
... | ... | @@ -9,15 +9,20 @@ |
9 | 9 | # alert_type :integer |
10 | 10 | # created_at :datetime not null |
11 | 11 | # updated_at :datetime not null |
12 | +# color :string(255) | |
13 | +# font :string(255) | |
12 | 14 | # |
13 | 15 | |
14 | 16 | class BroadcastMessage < ActiveRecord::Base |
15 | - attr_accessible :alert_type, :ends_at, :message, :starts_at | |
17 | + attr_accessible :alert_type, :color, :ends_at, :font, :message, :starts_at | |
16 | 18 | |
17 | 19 | validates :message, presence: true |
18 | 20 | validates :starts_at, presence: true |
19 | 21 | validates :ends_at, presence: true |
20 | 22 | |
23 | + validates :color, format: { with: /\A\#[0-9A-Fa-f]{6}+\Z/ }, allow_blank: true | |
24 | + validates :font, format: { with: /\A\#[0-9A-Fa-f]{6}+\Z/ }, allow_blank: true | |
25 | + | |
21 | 26 | def self.current |
22 | 27 | where("ends_at > :now AND starts_at < :now", now: Time.zone.now).last |
23 | 28 | end | ... | ... |
app/views/admin/broadcast_messages/index.html.haml
... | ... | @@ -2,7 +2,9 @@ |
2 | 2 | Broadcast Messages |
3 | 3 | %p.light |
4 | 4 | Broadcast messages are displayed for every user and can be used to notify users about scheduled maintenance, recent upgrades and more. |
5 | -%hr | |
5 | +.broadcast-message-preview | |
6 | + %i.icon-bullhorn | |
7 | + %span Your message here | |
6 | 8 | |
7 | 9 | = form_for [:admin, @broadcast_message] do |f| |
8 | 10 | -if @broadcast_message.errors.any? |
... | ... | @@ -13,6 +15,19 @@ |
13 | 15 | = f.label :message |
14 | 16 | .controls |
15 | 17 | = f.text_area :message, class: "input-xxlarge", rows: 2, required: true |
18 | + %div | |
19 | + = link_to '#', class: 'js-toggle-colors-link' do | |
20 | + Customize colors | |
21 | + .control-group.js-toggle-colors-container.hide | |
22 | + = f.label :color, "Background Color" | |
23 | + .controls | |
24 | + = f.text_field :color, placeholder: "#AA33EE" | |
25 | + .light Hex values as 3 double digit numbers, starting with a # sign. | |
26 | + .control-group.js-toggle-colors-container.hide | |
27 | + = f.label :font, "Font Color" | |
28 | + .controls | |
29 | + = f.text_field :font, placeholder: "#224466" | |
30 | + .light Hex values as 3 double digit numbers, starting with a # sign. | |
16 | 31 | .control-group |
17 | 32 | = f.label :starts_at |
18 | 33 | .controls.datetime-controls | ... | ... |
app/views/layouts/_broadcast.html.haml
app/views/projects/issues/_form.html.haml
... | ... | @@ -21,7 +21,7 @@ |
21 | 21 | Assign to |
22 | 22 | .controls |
23 | 23 | .pull-left |
24 | - = f.select(:assignee_id, @project.team.members.sort_by(&:name).map {|p| [ p.name, p.id ] }, { include_blank: "Select a user" }, {class: 'chosen'}) | |
24 | + = f.select(:assignee_id, assignee_options(@issue), { include_blank: "Select a user" }, {class: 'chosen'}) | |
25 | 25 | .pull-right |
26 | 26 | |
27 | 27 | = link_to 'Assign to me', '#', class: 'btn btn-small assign-to-me-link' |
... | ... | @@ -29,7 +29,7 @@ |
29 | 29 | = f.label :milestone_id do |
30 | 30 | %i.icon-time |
31 | 31 | Milestone |
32 | - .controls= f.select(:milestone_id, @project.milestones.active.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) | |
32 | + .controls= f.select(:milestone_id, milestone_options(@issue), { include_blank: "Select milestone" }, {class: 'chosen'}) | |
33 | 33 | |
34 | 34 | .ui-box-bottom |
35 | 35 | .control-group | ... | ... |
... | ... | @@ -0,0 +1,26 @@ |
1 | += form_for [@project, @issue], remote: true, html: {class: 'edit-issue inline-update'} do |f| | |
2 | + .pull-right | |
3 | + Created by #{link_to_member(@project, issue.author)} | |
4 | + - if issue.assignee | |
5 | + \ and currently assigned to | |
6 | + | |
7 | + - if can?(current_user, :modify_issue, @issue) | |
8 | + = link_to profile_path(issue.assignee) do | |
9 | + = image_tag(avatar_icon(issue.assignee.email), class: 'avatar avatar-inline s16 assignee') if issue.assignee | |
10 | + = f.select(:assignee_id, assignee_options(@issue), { include_blank: "Assign to user (none):" }, {class: 'chosen'}) | |
11 | + - elsif issue.assignee | |
12 | + = link_to_member(@project, @issue.assignee) | |
13 | + | |
14 | + | |
15 | + .pull-right | |
16 | + - if issue.milestone | |
17 | + - milestone = issue.milestone | |
18 | + %cite.cgray Attached to milestone | |
19 | + | |
20 | + - if can?(current_user, :modify_issue, @issue) | |
21 | + = f.select(:milestone_id, milestone_options(@issue), { include_blank: "Select milestone (none):" }, {class: 'chosen chosen-compact'}) | |
22 | + | |
23 | + = hidden_field_tag :issue_context | |
24 | + = f.submit class: 'btn' | |
25 | + - elsif issue.milestone | |
26 | + = link_to issue.milestone.title, project_milestone_path | ... | ... |
app/views/projects/issues/show.html.haml
... | ... | @@ -2,8 +2,12 @@ |
2 | 2 | Issue ##{@issue.iid} |
3 | 3 | |
4 | 4 | %small |
5 | - created at | |
6 | - = @issue.created_at.stamp("Aug 21, 2011") | |
5 | + created #{time_ago_with_tooltip(@issue.created_at)} ago | |
6 | + | |
7 | + - if @issue.closed? | |
8 | + %span.state-label.state-label-red Closed | |
9 | + - else | |
10 | + %span.state-label.state-label-green Open | |
7 | 11 | |
8 | 12 | %span.pull-right |
9 | 13 | - if can?(current_user, :write_issue, @project) |
... | ... | @@ -26,34 +30,21 @@ |
26 | 30 | .back-link |
27 | 31 | = link_to project_issues_path(@project) do |
28 | 32 | ← To issues list |
29 | - | |
33 | + %span.milestone-nav-link | |
34 | + - if @issue.milestone | |
35 | + | | |
36 | + = link_to project_milestone_path(@project, @issue.milestone) do | |
37 | + %span.light Milestone | |
38 | + = @issue.milestone.title | |
30 | 39 | |
31 | 40 | .ui-box.ui-box-show |
32 | 41 | .ui-box-head |
33 | 42 | %h4.box-title |
34 | - - if @issue.closed? | |
35 | - .state-label.state-label-red Closed | |
36 | - - else | |
37 | - .state-label.state-label-green Open | |
38 | 43 | = gfm escape_once(@issue.title) |
39 | 44 | |
40 | 45 | .ui-box-body |
41 | 46 | %cite.cgray |
42 | - Created by #{link_to_member(@project, @issue.author)} | |
43 | - - if @issue.assignee | |
44 | - \ and currently assigned to #{link_to_member(@project, @issue.assignee)} | |
45 | - | |
46 | - - if @issue.milestone | |
47 | - - milestone = @issue.milestone | |
48 | - %cite.cgray and attached to milestone | |
49 | - %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone) | |
50 | - | |
51 | - .pull-right | |
52 | - - @issue.labels.each do |label| | |
53 | - %span{class: "label #{label_css_class(label.name)}"} | |
54 | - %i.icon-tag | |
55 | - = label.name | |
56 | - | |
47 | + = render partial: 'issue_context', locals: { issue: @issue } | |
57 | 48 | |
58 | 49 | - if @issue.description.present? |
59 | 50 | .ui-box-bottom |
... | ... | @@ -73,4 +64,11 @@ |
73 | 64 | - @issue.participants.each do |participant| |
74 | 65 | = link_to_member(@project, participant, name: false, size: 24) |
75 | 66 | |
76 | -.voting_notes#notes= render "projects/notes/notes_with_form" | |
77 | 67 | \ No newline at end of file |
68 | + .issue-show-labels.pull-right | |
69 | + - @issue.labels.each do |label| | |
70 | + %span{class: "label #{label_css_class(label.name)}"} | |
71 | + %i.icon-tag | |
72 | + = label.name | |
73 | + | |
74 | + | |
75 | +.voting_notes#notes= render "projects/notes/notes_with_form" | ... | ... |
app/views/projects/issues/update.js.haml
... | ... | @@ -2,3 +2,12 @@ |
2 | 2 | - if @issue.valid? |
3 | 3 | :plain |
4 | 4 | $("##{dom_id(@issue)}").fadeOut(); |
5 | +- elsif params[:issue_context] | |
6 | + $('.ui-box-body').html("#{escape_javascript(render partial: 'issue_context', locals: { issue: @issue })}"); | |
7 | + $('.ui-box-body').effect('highlight'); | |
8 | + $('.chosen').chosen(); | |
9 | + $('.edit-issue.inline-update input[type="submit"]').hide(); | |
10 | + - if @issue.milestone | |
11 | + $('.milestone-nav-link').replaceWith("#{escape_javascript(link_to "| #{@issue.milestone.title}", project_milestone_path(@issue.project, @issue.milestone), :class => 'milestone-nav-link')}") | |
12 | + - else | |
13 | + $('.milestone-nav-link').html('') | ... | ... |
app/views/projects/merge_requests/_form.html.haml
... | ... | @@ -39,12 +39,12 @@ |
39 | 39 | = f.label :assignee_id do |
40 | 40 | %i.icon-user |
41 | 41 | Assign to |
42 | - .controls= f.select(:assignee_id, @project.team.members.sort_by(&:name).map {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) | |
42 | + .controls= f.select(:assignee_id, assignee_options(@merge_request), { include_blank: "Select user" }, {class: 'chosen span3'}) | |
43 | 43 | .left |
44 | 44 | = f.label :milestone_id do |
45 | 45 | %i.icon-time |
46 | 46 | Milestone |
47 | - .controls= f.select(:milestone_id, @project.milestones.active.map {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) | |
47 | + .controls= f.select(:milestone_id, milestone_options(@merge_request), { include_blank: "Select milestone" }, {class: 'chosen'}) | |
48 | 48 | .control-group |
49 | 49 | = f.label :description, "Description" |
50 | 50 | .controls | ... | ... |
app/views/projects/merge_requests/show/_mr_box.html.haml
... | ... | @@ -2,25 +2,18 @@ |
2 | 2 | .ui-box-head |
3 | 3 | %h4.box-title |
4 | 4 | = gfm escape_once(@merge_request.title) |
5 | - - if @merge_request.merged? | |
6 | - .state-label.state-label-green | |
7 | - %i.icon-ok | |
8 | - Merged | |
9 | - - elsif @merge_request.closed? | |
10 | - .state-label.state-label-red | |
11 | - Closed | |
12 | 5 | |
13 | 6 | .ui-box-body |
14 | 7 | %div |
15 | 8 | %cite.cgray |
16 | - Created on #{@merge_request.created_at.stamp("Aug 21, 2011")} by #{link_to_member(@project, @merge_request.author)}. | |
9 | + Created by #{link_to_member(@project, @merge_request.author)}. | |
17 | 10 | - if @merge_request.assignee |
18 | 11 | Currently assigned to #{link_to_member(@project, @merge_request.assignee)}. |
19 | 12 | - if @merge_request.milestone |
20 | - - milestone = @merge_request.milestone | |
21 | - %cite.cgray Attached to milestone | |
22 | - %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone) | |
23 | - \. | |
13 | + .pull-right | |
14 | + - milestone = @merge_request.milestone | |
15 | + %cite.cgray Attached to milestone | |
16 | + %strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone) | |
24 | 17 | |
25 | 18 | |
26 | 19 | - if @merge_request.description.present? | ... | ... |
app/views/projects/merge_requests/show/_mr_title.html.haml
1 | 1 | %h3.page-title |
2 | - = "Merge Request ##{@merge_request.iid}:" | |
3 | - | |
4 | - -if @merge_request.for_fork? | |
5 | - %span.label-branch | |
6 | - %span.label-project= truncate(@merge_request.source_project_path, length: 25) | |
7 | - #{@merge_request.source_branch} | |
8 | - → | |
9 | - %span.label-branch= @merge_request.target_branch | |
2 | + = "Merge Request ##{@merge_request.iid}" | |
3 | + %small | |
4 | + created #{time_ago_with_tooltip(@merge_request.created_at)} ago | |
5 | + | |
6 | + - if @merge_request.merged? | |
7 | + %span.state-label.state-label-green | |
8 | + %i.icon-ok | |
9 | + Merged | |
10 | + - elsif @merge_request.closed? | |
11 | + %span.state-label.state-label-red | |
12 | + Closed | |
10 | 13 | - else |
11 | - %span.label-branch= @merge_request.source_branch | |
12 | - → | |
13 | - %span.label-branch= @merge_request.target_branch | |
14 | + %span.state-label.state-label-green | |
15 | + Open | |
16 | + | |
17 | + | |
14 | 18 | |
15 | 19 | %span.pull-right |
16 | 20 | - if can?(current_user, :modify_merge_request, @merge_request) |
... | ... | @@ -36,3 +40,16 @@ |
36 | 40 | .back-link |
37 | 41 | = link_to project_merge_requests_path(@project) do |
38 | 42 | ← To merge requests |
43 | + | |
44 | + %span.prepend-left-20.monospace | |
45 | + -if @merge_request.for_fork? | |
46 | + %span | |
47 | + %strong | |
48 | + #{truncate(@merge_request.source_project_path, length: 25)}: | |
49 | + #{@merge_request.source_branch} | |
50 | + → | |
51 | + %span= @merge_request.target_branch | |
52 | + - else | |
53 | + %span= @merge_request.source_branch | |
54 | + → | |
55 | + %spanh= @merge_request.target_branch | ... | ... |
app/views/projects/milestones/show.html.haml
... | ... | @@ -3,15 +3,21 @@ |
3 | 3 | Milestone ##{@milestone.iid} |
4 | 4 | %small |
5 | 5 | = @milestone.expires_at |
6 | + - if @milestone.closed? | |
7 | + %span.state-label.state-label-red Closed | |
8 | + - elsif @milestone.expired? | |
9 | + %span.state-label.state-label-red Expired | |
10 | + - else | |
11 | + %span.state-label.state-label-green Open | |
6 | 12 | .pull-right |
7 | 13 | - if can?(current_user, :admin_milestone, @project) |
8 | 14 | = link_to edit_project_milestone_path(@project, @milestone), class: "btn grouped" do |
9 | 15 | %i.icon-edit |
10 | 16 | Edit |
11 | 17 | - if @milestone.active? |
12 | - = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-remove" | |
18 | + = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-remove grouped" | |
13 | 19 | - else |
14 | - = link_to 'Reopen Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn" | |
20 | + = link_to 'Reopen Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn grouped" | |
15 | 21 | |
16 | 22 | - if @milestone.issues.any? && @milestone.can_be_closed? |
17 | 23 | .alert.alert-success |
... | ... | @@ -25,10 +31,6 @@ |
25 | 31 | .ui-box.ui-box-show |
26 | 32 | .ui-box-head |
27 | 33 | %h4.box-title |
28 | - - if @milestone.closed? | |
29 | - .state-label.state-label-red Closed | |
30 | - - elsif @milestone.expired? | |
31 | - .state-label.state-label-red Expired | |
32 | 34 | |
33 | 35 | = gfm escape_once(@milestone.title) |
34 | 36 | ... | ... |
db/migrate/20131130165425_add_color_and_font_to_broadcast_messages.rb
0 → 100644
db/schema.rb
... | ... | @@ -20,6 +20,8 @@ ActiveRecord::Schema.define(version: 20131217102743) do |
20 | 20 | t.integer "alert_type" |
21 | 21 | t.datetime "created_at", null: false |
22 | 22 | t.datetime "updated_at", null: false |
23 | + t.string "color" | |
24 | + t.string "font" | |
23 | 25 | end |
24 | 26 | |
25 | 27 | create_table "deploy_keys_projects", force: true do |t| | ... | ... |
features/admin/broadcast_messages.feature
... | ... | @@ -11,3 +11,10 @@ Feature: Admin Broadcast Messages |
11 | 11 | When submit form with new broadcast message |
12 | 12 | Then I should be redirected to admin messages page |
13 | 13 | And I should see newly created broadcast message |
14 | + | |
15 | + Scenario: Create a customized broadcast message | |
16 | + When submit form with new customized broadcast message | |
17 | + Then I should be redirected to admin messages page | |
18 | + And I should see newly created broadcast message | |
19 | + Then I visit dashboard page | |
20 | + And I should see a customized broadcast message | ... | ... |
features/steps/admin/admin_broadcast_messages.rb
... | ... | @@ -24,4 +24,18 @@ class Spinach::Features::AdminBroadcastMessages < Spinach::FeatureSteps |
24 | 24 | step 'I should see newly created broadcast message' do |
25 | 25 | page.should have_content 'Application update from 4:00 CST to 5:00 CST' |
26 | 26 | end |
27 | + | |
28 | + step 'submit form with new customized broadcast message' do | |
29 | + fill_in 'broadcast_message_message', with: 'Application update from 4:00 CST to 5:00 CST' | |
30 | + click_link "Customize colors" | |
31 | + fill_in 'broadcast_message_color', with: '#f2dede' | |
32 | + fill_in 'broadcast_message_font', with: '#b94a48' | |
33 | + select '2018', from: "broadcast_message_ends_at_1i" | |
34 | + click_button "Add broadcast message" | |
35 | + end | |
36 | + | |
37 | + step 'I should see a customized broadcast message' do | |
38 | + page.should have_content 'Application update from 4:00 CST to 5:00 CST' | |
39 | + page.should have_selector %(div[style="background-color:#f2dede;color:#b94a48"]) | |
40 | + end | |
27 | 41 | end | ... | ... |
spec/factories/broadcast_messages.rb
... | ... | @@ -9,6 +9,8 @@ |
9 | 9 | # alert_type :integer |
10 | 10 | # created_at :datetime not null |
11 | 11 | # updated_at :datetime not null |
12 | +# color :string(255) | |
13 | +# font :string(255) | |
12 | 14 | # |
13 | 15 | |
14 | 16 | # Read about factories at https://github.com/thoughtbot/factory_girl |
... | ... | @@ -19,5 +21,7 @@ FactoryGirl.define do |
19 | 21 | starts_at "2013-11-12 13:43:25" |
20 | 22 | ends_at "2013-11-12 13:43:25" |
21 | 23 | alert_type 1 |
24 | + color "#555555" | |
25 | + font "#BBBBBB" | |
22 | 26 | end |
23 | 27 | end | ... | ... |
spec/features/issues_spec.rb
... | ... | @@ -175,6 +175,84 @@ describe "Issues" do |
175 | 175 | end |
176 | 176 | end |
177 | 177 | |
178 | + describe 'update assignee from issue#show' do | |
179 | + let(:issue) { create(:issue, project: project, author: @user) } | |
180 | + | |
181 | + context 'by autorized user' do | |
182 | + | |
183 | + it 'with dropdown menu' do | |
184 | + visit project_issue_path(project, issue) | |
185 | + | |
186 | + find('.edit-issue.inline-update').select(project.team.members.first.name, from: 'issue_assignee_id') | |
187 | + click_button 'Update Issue' | |
188 | + | |
189 | + page.should have_content "currently assigned to" | |
190 | + page.has_select?('issue_assignee_id', :selected => project.team.members.first.name) | |
191 | + end | |
192 | + end | |
193 | + | |
194 | + context 'by unauthorized user' do | |
195 | + | |
196 | + let(:guest) { create(:user) } | |
197 | + | |
198 | + before :each do | |
199 | + project.team << [[guest], :guest] | |
200 | + issue.assignee = @user | |
201 | + issue.save | |
202 | + end | |
203 | + | |
204 | + it 'shows assignee text' do | |
205 | + logout | |
206 | + login_with guest | |
207 | + | |
208 | + visit project_issue_path(project, issue) | |
209 | + page.should have_content "currently assigned to #{issue.assignee.name}" | |
210 | + | |
211 | + end | |
212 | + end | |
213 | + | |
214 | + end | |
215 | + | |
216 | + describe 'update milestone from issue#show' do | |
217 | + let!(:issue) { create(:issue, project: project, author: @user) } | |
218 | + let!(:milestone) { create(:milestone, project: project) } | |
219 | + | |
220 | + context 'by authorized user' do | |
221 | + | |
222 | + it 'with dropdown menu' do | |
223 | + visit project_issue_path(project, issue) | |
224 | + | |
225 | + p find('.edit-issue.inline-update').text | |
226 | + | |
227 | + find('.edit-issue.inline-update').select(milestone.title, from: 'issue_milestone_id') | |
228 | + click_button 'Update Issue' | |
229 | + | |
230 | + page.should have_content "Attached to milestone" | |
231 | + page.has_select?('issue_assignee_id', :selected => milestone.title) | |
232 | + end | |
233 | + end | |
234 | + | |
235 | + context 'by unauthorized user' do | |
236 | + | |
237 | + let(:guest) { create(:user) } | |
238 | + | |
239 | + before :each do | |
240 | + project.team << [[guest], :guest] | |
241 | + issue.milestone = milestone | |
242 | + issue.save | |
243 | + end | |
244 | + | |
245 | + it 'shows milestone text' do | |
246 | + logout | |
247 | + login_with guest | |
248 | + | |
249 | + visit project_issue_path(project, issue) | |
250 | + | |
251 | + page.should have_content "Attached to milestone #{milestone.title}" | |
252 | + end | |
253 | + end | |
254 | + end | |
255 | + | |
178 | 256 | def first_issue |
179 | 257 | all("ul.issues-list li").first.text |
180 | 258 | end | ... | ... |
... | ... | @@ -0,0 +1,21 @@ |
1 | +require 'spec_helper' | |
2 | + | |
3 | +describe BroadcastMessagesHelper do | |
4 | + describe 'broadcast_styling' do | |
5 | + let(:broadcast_message) { double(color: "", font: "") } | |
6 | + | |
7 | + context "default style" do | |
8 | + it "should have no style" do | |
9 | + broadcast_styling(broadcast_message).should match('') | |
10 | + end | |
11 | + end | |
12 | + | |
13 | + context "customiezd style" do | |
14 | + before { broadcast_message.stub(color: "#f2dede", font: "#b94a48") } | |
15 | + | |
16 | + it "should have a customized style" do | |
17 | + broadcast_styling(broadcast_message).should match('background-color:#f2dede;color:#b94a48') | |
18 | + end | |
19 | + end | |
20 | + end | |
21 | +end | ... | ... |