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