parent
867916976e
commit
928b7cbdf7
@ -0,0 +1,130 @@ |
|||||||
|
Feature: The issue hierarchy defines the allowed versions for each issue dependent on the type |
||||||
|
As a team member |
||||||
|
I want to CRUD issues with a reliable target version system |
||||||
|
So that I know what target version an issue can have or will be assigned |
||||||
|
|
||||||
|
Background: |
||||||
|
Given there is 1 project with: |
||||||
|
| name | ecookbook | |
||||||
|
And I am working in project "ecookbook" |
||||||
|
And the project uses the following modules: |
||||||
|
| backlogs | |
||||||
|
And there is a role "scrum master" |
||||||
|
And the role "scrum master" may have the following rights: |
||||||
|
| view_master_backlog | |
||||||
|
| view_taskboards | |
||||||
|
| update_sprints | |
||||||
|
| update_stories | |
||||||
|
| create_impediments | |
||||||
|
| update_impediments | |
||||||
|
| update_tasks | |
||||||
|
| subscribe_to_calendars | |
||||||
|
| view_wiki_pages | |
||||||
|
| edit_wiki_pages | |
||||||
|
| view_issues | |
||||||
|
| edit_issues | |
||||||
|
| manage_subtasks | |
||||||
|
| create_tasks | |
||||||
|
| add_issues | |
||||||
|
And the backlogs module is initialized |
||||||
|
And the following trackers are configured to track stories: |
||||||
|
| Story | |
||||||
|
And the tracker "Task" is configured to track tasks |
||||||
|
And the project uses the following trackers: |
||||||
|
| Story | |
||||||
|
| Epic | |
||||||
|
| Task | |
||||||
|
| Bug | |
||||||
|
And the tracker "Task" has the default workflow for the role "scrum master" |
||||||
|
And there is 1 user with: |
||||||
|
| login | markus | |
||||||
|
| firstname | Markus | |
||||||
|
| Lastname | Master | |
||||||
|
And the user "markus" is a "scrum master" |
||||||
|
And the project has the following sprints: |
||||||
|
| name | start_date | effective_date | |
||||||
|
| Sprint 001 | 2010-01-01 | 2010-01-31 | |
||||||
|
| Sprint 002 | 2010-02-01 | 2010-02-28 | |
||||||
|
| Sprint 003 | 2010-03-01 | 2010-03-31 | |
||||||
|
| Sprint 004 | 2.weeks.ago | 1.week.from_now | |
||||||
|
| Sprint 005 | 3.weeks.ago | 2.weeks.from_now| |
||||||
|
And the project has the following stories in the following sprints: |
||||||
|
| position | subject | sprint | |
||||||
|
| 5 | Story A | Sprint 001 | |
||||||
|
| 6 | Story B | Sprint 001 | |
||||||
|
| 7 | Story C | Sprint 002 | |
||||||
|
And there are the following issue status: |
||||||
|
| name | is_closed | is_default | |
||||||
|
| New | false | true | |
||||||
|
| In Progress | false | false | |
||||||
|
| Resolved | false | false | |
||||||
|
| Closed | true | false | |
||||||
|
| Rejected | true | false | |
||||||
|
And I am logged in as "markus" |
||||||
|
|
||||||
|
@javascript |
||||||
|
Scenario: Creating a task, via the taskboard, as a subtask to a story sets the target version to the story´s version |
||||||
|
Given I am on the taskboard for "Sprint 001" |
||||||
|
When I click to add a new task for story "Story A" |
||||||
|
And I fill in "Task 0815" for "subject" |
||||||
|
And I press "OK" |
||||||
|
Then I should see "Task 0815" as a task to story "Story A" |
||||||
|
And the task "Task 0815" should have "Sprint 001" as its target version |
||||||
|
|
||||||
|
@javascript |
||||||
|
Scenario: Stale Object Error when creating task via the taskboard without 'Remaining Hours' after having created a task with 'Remaining Hours' after having created a task without 'Remaining Hours' (bug 9057) |
||||||
|
Given I am on the taskboard for "Sprint 001" |
||||||
|
When I click to add a new task for story "Story A" |
||||||
|
And I fill in "Task1" for "subject" |
||||||
|
And I fill in "3" for "remaining_hours" |
||||||
|
And I press "OK" |
||||||
|
And I click to add a new task for story "Story A" |
||||||
|
And I fill in "Task2" for "subject" |
||||||
|
And I press "OK" |
||||||
|
And I click to add a new task for story "Story A" |
||||||
|
And I fill in "Task3" for "subject" |
||||||
|
And I fill in "3" for "remaining_hours" |
||||||
|
And I press "OK" |
||||||
|
And the request on task "Task1" is finished |
||||||
|
And the request on task "Task2" is finished |
||||||
|
And the request on task "Task3" is finished |
||||||
|
Then there should not be a saving error on task "Task3" |
||||||
|
And the task "Task1" should have "Sprint 001" as its target version |
||||||
|
And the task "Task2" should have "Sprint 001" as its target version |
||||||
|
And the task "Task3" should have "Sprint 001" as its target version |
||||||
|
And task Task1 should have remaining_hours set to 3 |
||||||
|
And task Task3 should have remaining_hours set to 3 |
||||||
|
|
||||||
|
#Scenario: Moving a task between stories on the taskboard |
||||||
|
# not testable for now |
||||||
|
|
||||||
|
@javascript |
||||||
|
Scenario: Creating a task, via subtask, as a subtask to a story set´s the new task´s fixed version to the parent´s fixed version |
||||||
|
When I go to the page of the issue "Story A" |
||||||
|
And I follow "Add" within "div#issue_tree" |
||||||
|
And I select "Task" from "issue_tracker_id" |
||||||
|
And I fill in "Task 0815" for "issue_subject" |
||||||
|
And I press "Create" |
||||||
|
Then I should see "Sprint 001" within "td.fixed-version" |
||||||
|
|
||||||
|
@javascript |
||||||
|
Scenario: Creating a task, via new issue, as a subtask to a story is not possible |
||||||
|
When I go to the issues/new page of the project called "ecookbook" |
||||||
|
And I follow "New issue" within "#main-menu" |
||||||
|
And I select "Task" from "issue_tracker_id" |
||||||
|
And I fill in "Task 0815" for "issue_subject" |
||||||
|
And I fill in the id of the issue "Story A" as the parent issue |
||||||
|
And I press "Create" |
||||||
|
Then I should see "Sprint 001" within "td.fixed-version" |
||||||
|
|
||||||
|
@javascript |
||||||
|
Scenario: Moving a task between stories via issue/edit |
||||||
|
Given the project has the following tasks: |
||||||
|
| subject | parent | |
||||||
|
| Task 1 | Story 1 | |
||||||
|
When I go to the edit page of the issue "Task 1" |
||||||
|
And I follow "More" within "#issue-form" |
||||||
|
And I fill in the id of the issue "Story C" as the parent issue |
||||||
|
And I press "Submit" |
||||||
|
Then I should see "Sprint 002" within "td.fixed-version" |
||||||
|
|
@ -0,0 +1,513 @@ |
|||||||
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') |
||||||
|
|
||||||
|
describe Issue, "changing a story's fixed_version changes the fixed_version of all it's tasks (and the tasks beyond)" do |
||||||
|
let(:tracker_feature) { Factory.build(:tracker_feature) } |
||||||
|
let(:tracker_task) { Factory.build(:tracker_task) } |
||||||
|
let(:tracker_bug) { Factory.build(:tracker_bug) } |
||||||
|
let(:version1) { project.versions.first } |
||||||
|
let(:version2) { project.versions.last } |
||||||
|
let(:role) { Factory.build(:role) } |
||||||
|
let(:user) { Factory.build(:user) } |
||||||
|
let(:issue_priority) { Factory.build(:priority) } |
||||||
|
let(:issue_status) { Factory.build(:issue_status, :name => "status 1", :is_default => true) } |
||||||
|
|
||||||
|
let(:project) do |
||||||
|
p = Factory.build(:project, :members => [Factory.build(:member, |
||||||
|
:principal => user, |
||||||
|
:roles => [role])], |
||||||
|
:trackers => [tracker_feature, tracker_task, tracker_bug]) |
||||||
|
|
||||||
|
p.versions << Factory.build(:version, :name => "Version1", :project => p) |
||||||
|
p.versions << Factory.build(:version, :name => "Version2", :project => p) |
||||||
|
|
||||||
|
p |
||||||
|
end |
||||||
|
|
||||||
|
let(:story) { Factory.build(:issue, |
||||||
|
:subject => "Story", |
||||||
|
:project => project, |
||||||
|
:tracker => tracker_feature, |
||||||
|
:fixed_version => version1, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:story2) { Factory.build(:issue, |
||||||
|
:subject => "Story2", |
||||||
|
:project => project, |
||||||
|
:tracker => tracker_feature, |
||||||
|
:fixed_version => version1, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:story3) { Factory.build(:issue, |
||||||
|
:subject => "Story3", |
||||||
|
:project => project, |
||||||
|
:tracker => tracker_feature, |
||||||
|
:fixed_version => version1, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task) { Factory.build(:issue, |
||||||
|
:subject => "Task", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task2) { Factory.build(:issue, |
||||||
|
:subject => "Task2", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task3) { Factory.build(:issue, |
||||||
|
:subject => "Task3", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task4) { Factory.build(:issue, |
||||||
|
:subject => "Task4", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task5) { Factory.build(:issue, |
||||||
|
:subject => "Task5", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:bug) { Factory.build(:issue, |
||||||
|
:subject => "Bug", |
||||||
|
:tracker => tracker_bug, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:bug2) { Factory.build(:issue, |
||||||
|
:subject => "Bug2", |
||||||
|
:tracker => tracker_bug, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:bug3) { Factory.build(:issue, |
||||||
|
:subject => "Bug3", |
||||||
|
:tracker => tracker_bug, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
before(:each) do |
||||||
|
project.save! |
||||||
|
|
||||||
|
Setting.plugin_redmine_backlogs = { :points_burn_direction => "down", |
||||||
|
:wiki_template => "", |
||||||
|
:card_spec => "Sattleford VM-5040", |
||||||
|
:story_trackers => [tracker_feature.id], |
||||||
|
:task_tracker => tracker_task.id.to_s } |
||||||
|
end |
||||||
|
|
||||||
|
def standard_child_layout |
||||||
|
# Layout is |
||||||
|
# child |
||||||
|
# -> task3 |
||||||
|
# -> bug3 |
||||||
|
# -> task4 |
||||||
|
# -> story3 |
||||||
|
# -> task5 |
||||||
|
|
||||||
|
task3.parent_issue_id = child.id |
||||||
|
task3.save! |
||||||
|
bug3.parent_issue_id = child.id |
||||||
|
bug3.save! |
||||||
|
story3.parent_issue_id = child.id |
||||||
|
story3.save! |
||||||
|
|
||||||
|
task4.parent_issue_id = bug3.id |
||||||
|
task4.save! |
||||||
|
task5.parent_issue_id = story3.id |
||||||
|
task5.save! |
||||||
|
|
||||||
|
child.reload |
||||||
|
end |
||||||
|
|
||||||
|
|
||||||
|
describe "WHEN changing fixed_version" do |
||||||
|
|
||||||
|
shared_examples_for "changing parent's fixed_version changes child's fixed version" do |
||||||
|
|
||||||
|
it "SHOULD change the child's fixed version to the parent's fixed version" do |
||||||
|
subject.save! |
||||||
|
child.parent_issue_id = subject.id |
||||||
|
child.save! |
||||||
|
|
||||||
|
standard_child_layout |
||||||
|
|
||||||
|
subject.reload |
||||||
|
|
||||||
|
subject.fixed_version = version2 |
||||||
|
subject.save! |
||||||
|
|
||||||
|
#due to performance, these assertions are all in one it statement |
||||||
|
child.reload.fixed_version.should eql version2 |
||||||
|
task3.reload.fixed_version.should eql version2 |
||||||
|
bug3.reload.fixed_version.should eql version1 |
||||||
|
story3.reload.fixed_version.should eql version1 |
||||||
|
task4.reload.fixed_version.should eql version1 |
||||||
|
task5.reload.fixed_version.should eql version1 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
shared_examples_for "changing parent's fixed_version does not change child's fixed_version" do |
||||||
|
|
||||||
|
it "SHOULD keep the child's version" do |
||||||
|
subject.save! |
||||||
|
child.parent_issue_id = subject.id |
||||||
|
child.save! |
||||||
|
|
||||||
|
standard_child_layout |
||||||
|
|
||||||
|
subject.reload |
||||||
|
|
||||||
|
subject.fixed_version = version2 |
||||||
|
subject.save! |
||||||
|
|
||||||
|
#due to performance, these assertions are all in one it statement |
||||||
|
child.reload.fixed_version.should eql version1 |
||||||
|
bug3.reload.fixed_version.should eql version1 |
||||||
|
story3.reload.fixed_version.should eql version1 |
||||||
|
task3.reload.fixed_version.should eql version1 |
||||||
|
task4.reload.fixed_version.should eql version1 |
||||||
|
task5.reload.fixed_version.should eql version1 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH backlogs enabled" do |
||||||
|
|
||||||
|
describe "WITH a story" do |
||||||
|
subject { story } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as a child" do |
||||||
|
let(:child) { story2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task" do |
||||||
|
before(:each) do |
||||||
|
bug2.save! |
||||||
|
task.parent_issue_id = bug2.id #so that it is considered a task |
||||||
|
task.save! |
||||||
|
end |
||||||
|
|
||||||
|
subject { task } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task (impediment) without a parent" do |
||||||
|
subject { task } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue" do |
||||||
|
subject { bug } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as a child" do |
||||||
|
let(:child) { story } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH backlogs disabled" do |
||||||
|
before(:each) do |
||||||
|
project.enabled_module_names = project.enabled_module_names.find_all{|n| n != "backlogs" } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story" do |
||||||
|
subject { story } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as a child" do |
||||||
|
let(:child) { story2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task" do |
||||||
|
before(:each) do |
||||||
|
bug2.save! |
||||||
|
task.parent_issue_id = bug2.id #so that it is considered a task |
||||||
|
task.save! |
||||||
|
end |
||||||
|
|
||||||
|
subject { task } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task (impediment) without a parent" do |
||||||
|
subject { task } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue" do |
||||||
|
subject { bug } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as a child" do |
||||||
|
let(:child) { story } |
||||||
|
|
||||||
|
it_should_behave_like "changing parent's fixed_version does not change child's fixed_version" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WHEN changing the parent_issue_id" do |
||||||
|
shared_examples_for "changing the child's parent_issue to the parent changes child's fixed version" do |
||||||
|
|
||||||
|
it "SHOULD change the child's fixed version to the parent's fixed version" do |
||||||
|
child.save! |
||||||
|
standard_child_layout |
||||||
|
|
||||||
|
parent.fixed_version = version2 |
||||||
|
parent.save! |
||||||
|
child.parent_issue_id = parent.id |
||||||
|
child.save! |
||||||
|
|
||||||
|
#due to performance, these assertions are all in one it statement |
||||||
|
child.reload.fixed_version.should eql version2 |
||||||
|
task3.reload.fixed_version.should eql version2 |
||||||
|
bug3.reload.fixed_version.should eql version1 |
||||||
|
story3.reload.fixed_version.should eql version1 |
||||||
|
task4.reload.fixed_version.should eql version1 |
||||||
|
task5.reload.fixed_version.should eql version1 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
shared_examples_for "changing the child's parent_issue to the parent leaves child's fixed version" do |
||||||
|
|
||||||
|
it "SHOULD keep the child's version" do |
||||||
|
child.save! |
||||||
|
standard_child_layout |
||||||
|
|
||||||
|
parent.fixed_version = version2 |
||||||
|
parent.save! |
||||||
|
child.parent_issue_id = parent.id |
||||||
|
child.save! |
||||||
|
|
||||||
|
#due to performance, these assertions are all in one it statement |
||||||
|
child.reload.fixed_version.should eql version1 |
||||||
|
bug3.reload.fixed_version.should eql version1 |
||||||
|
story3.reload.fixed_version.should eql version1 |
||||||
|
task3.reload.fixed_version.should eql version1 |
||||||
|
task4.reload.fixed_version.should eql version1 |
||||||
|
task5.reload.fixed_version.should eql version1 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH backogs enabled" do |
||||||
|
describe "WITH a story as parent" do |
||||||
|
let(:parent) { story } |
||||||
|
|
||||||
|
describe "WITH a story as child" do |
||||||
|
let(:child) { story2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non-backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task as parent" do |
||||||
|
before(:each) do |
||||||
|
story.save! |
||||||
|
task.parent_issue_id = story.id |
||||||
|
task.save! |
||||||
|
story.reload |
||||||
|
task.reload |
||||||
|
end |
||||||
|
|
||||||
|
let(:parent) { story } #needs to be the story because it is not possible to change a task's fixed_version_id |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non-backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH an impediment (task) as parent" do |
||||||
|
let(:parent) { task } |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent changes child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non-backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non-backlogs issue as parent" do |
||||||
|
let(:parent) { bug } |
||||||
|
|
||||||
|
describe "WITH a story as child" do |
||||||
|
let(:child) { story2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task as child" do |
||||||
|
let(:child) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non-backlogs issue as child" do |
||||||
|
let(:child) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "changing the child's parent_issue to the parent leaves child's fixed version" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,323 @@ |
|||||||
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') |
||||||
|
|
||||||
|
describe Issue, "fixed version restricted by an issues parents (if it's a task)" do |
||||||
|
let(:tracker_feature) { Factory.build(:tracker_feature) } |
||||||
|
let(:tracker_task) { Factory.build(:tracker_task) } |
||||||
|
let(:tracker_bug) { Factory.build(:tracker_bug) } |
||||||
|
let(:version1) { project.versions.first } |
||||||
|
let(:version2) { project.versions.last } |
||||||
|
let(:role) { Factory.build(:role) } |
||||||
|
let(:user) { Factory.build(:user) } |
||||||
|
let(:issue_priority) { Factory.build(:priority) } |
||||||
|
let(:issue_status) { Factory.build(:issue_status, :name => "status 1", :is_default => true) } |
||||||
|
|
||||||
|
let(:project) do |
||||||
|
p = Factory.build(:project, :members => [Factory.build(:member, |
||||||
|
:principal => user, |
||||||
|
:roles => [role])], |
||||||
|
:trackers => [tracker_feature, tracker_task, tracker_bug]) |
||||||
|
|
||||||
|
p.versions << Factory.build(:version, :name => "Version1", :project => p) |
||||||
|
p.versions << Factory.build(:version, :name => "Version2", :project => p) |
||||||
|
|
||||||
|
p |
||||||
|
end |
||||||
|
|
||||||
|
|
||||||
|
let(:story) { Factory.build(:issue, |
||||||
|
:subject => "Story", |
||||||
|
:project => project, |
||||||
|
:tracker => tracker_feature, |
||||||
|
:fixed_version => version1, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:story2) { Factory.build(:issue, |
||||||
|
:subject => "Story2", |
||||||
|
:project => project, |
||||||
|
:tracker => tracker_feature, |
||||||
|
:fixed_version => version1, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task) { Factory.build(:issue, |
||||||
|
:subject => "Task", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:task2) { Factory.build(:issue, |
||||||
|
:subject => "Task2", |
||||||
|
:tracker => tracker_task, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:bug) { Factory.build(:issue, |
||||||
|
:subject => "Bug", |
||||||
|
:tracker => tracker_bug, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
let(:bug2) { Factory.build(:issue, |
||||||
|
:subject => "Bug2", |
||||||
|
:tracker => tracker_bug, |
||||||
|
:fixed_version => version1, |
||||||
|
:project => project, |
||||||
|
:status => issue_status, |
||||||
|
:author => user, |
||||||
|
:priority => issue_priority) } |
||||||
|
|
||||||
|
shared_examples_for "fixed version beeing inherited from the parent" do |
||||||
|
|
||||||
|
before(:each) do |
||||||
|
parent.save! |
||||||
|
subject.parent_issue_id = parent.id |
||||||
|
subject.save! |
||||||
|
parent.reload |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITHOUT a fixed version and the parent also having no fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = nil |
||||||
|
parent.save! |
||||||
|
subject.reload |
||||||
|
subject.fixed_version = nil |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should be_nil } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITHOUT a fixed version and the parent having a fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = nil |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having a different fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = version2 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having the same fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = version1 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having no fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = nil |
||||||
|
parent.save! |
||||||
|
subject.reload |
||||||
|
subject.fixed_version = version1 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should be_nil } |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
shared_examples_for "fixed version not beeing inherited from the parent" do |
||||||
|
|
||||||
|
before(:each) do |
||||||
|
parent.save! |
||||||
|
subject.parent_issue_id = parent.id |
||||||
|
subject.save! |
||||||
|
parent.reload |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITHOUT a fixed version and the parent also having no fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = nil |
||||||
|
parent.save! |
||||||
|
subject.reload |
||||||
|
subject.fixed_version = nil |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should be_nil } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITHOUT a fixed version and the parent having a fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = nil |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should be_nil } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having a different fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = version2 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version2 } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having the same fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = version1 |
||||||
|
parent.save! |
||||||
|
subject.fixed_version = version1 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version and the parent having no fixed version" do |
||||||
|
before(:each) do |
||||||
|
parent.fixed_version = nil |
||||||
|
parent.save! |
||||||
|
subject.reload |
||||||
|
subject.fixed_version = version1 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
shared_examples_for "fixed version without restriction" do |
||||||
|
describe "WITHOUT a fixed version" do |
||||||
|
before(:each) do |
||||||
|
subject.fixed_version = nil |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should be_nil } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a fixed version" do |
||||||
|
before(:each) do |
||||||
|
subject.fixed_version = version1 |
||||||
|
subject.save! |
||||||
|
end |
||||||
|
|
||||||
|
it { subject.reload.fixed_version.should eql version1 } |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
before(:each) do |
||||||
|
project.save! |
||||||
|
|
||||||
|
Setting.plugin_redmine_backlogs = { :points_burn_direction => "down", |
||||||
|
:wiki_template => "", |
||||||
|
:card_spec => "Sattleford VM-5040", |
||||||
|
:story_trackers => [tracker_feature.id], |
||||||
|
:task_tracker => tracker_task.id.to_s } |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story" do |
||||||
|
subject { story } |
||||||
|
|
||||||
|
describe "WITHOUT a parent issue" do |
||||||
|
it_should_behave_like "fixed version without restriction" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as it's parent" do |
||||||
|
let(:parent) { story2 } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs tracked issue as it's parent" do |
||||||
|
let(:parent) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task" do |
||||||
|
subject { task } |
||||||
|
|
||||||
|
describe "WITHOUT a parent issue (would than be an impediment)" do |
||||||
|
it_should_behave_like "fixed version without restriction" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task as it's parent" do |
||||||
|
before(:each) do |
||||||
|
story.save! |
||||||
|
task2.parent_issue_id = story.id #a task needs a parent |
||||||
|
task2.save! |
||||||
|
story.reload |
||||||
|
end |
||||||
|
|
||||||
|
let(:parent) { story } #it's actually the grandparent but it makes no difference for the test |
||||||
|
|
||||||
|
it_should_behave_like "fixed version beeing inherited from the parent" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as it's parent" do |
||||||
|
let(:parent) { story } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version beeing inherited from the parent" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs tracked issue as it's parent" do |
||||||
|
let(:parent) { bug } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs issue" do |
||||||
|
subject { bug } |
||||||
|
|
||||||
|
describe "WITHOUT a parent issue" do |
||||||
|
it_should_behave_like "fixed version without restriction" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a task as it's parent" do |
||||||
|
let(:parent) { task2 } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a story as it's parent" do |
||||||
|
let(:parent) { story } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
|
||||||
|
describe "WITH a non backlogs tracked issue as it's parent" do |
||||||
|
let(:parent) { bug2 } |
||||||
|
|
||||||
|
it_should_behave_like "fixed version not beeing inherited from the parent" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue