dorsale 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/app/assets/stylesheets/dorsale/engines/flyboy.sass +0 -7
  4. data/app/controllers/dorsale/alexandrie/attachments_controller.rb +7 -0
  5. data/app/controllers/dorsale/application_controller.rb +1 -0
  6. data/app/controllers/dorsale/billing_machine/invoices_controller.rb +2 -0
  7. data/app/controllers/dorsale/billing_machine/quotations_controller.rb +2 -0
  8. data/app/controllers/dorsale/customer_vault/application_controller.rb +0 -4
  9. data/app/controllers/dorsale/customer_vault/people_controller.rb +0 -2
  10. data/app/controllers/dorsale/expense_gun/expenses_controller.rb +2 -2
  11. data/app/controllers/dorsale/flyboy/application_controller.rb +0 -3
  12. data/app/controllers/dorsale/flyboy/tasks_controller.rb +2 -8
  13. data/app/helpers/dorsale/all_helpers.rb +1 -0
  14. data/app/helpers/dorsale/flyboy/application_helper.rb +3 -12
  15. data/app/helpers/dorsale/link_helper.rb +10 -0
  16. data/app/helpers/dorsale/sorting_helper.rb +48 -0
  17. data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +1 -1
  18. data/app/models/concerns/dorsale/model_i18n.rb +25 -0
  19. data/app/models/concerns/dorsale/model_to_s.rb +9 -0
  20. data/{lib → app/models/concerns}/dorsale/polymorphic_id.rb +1 -3
  21. data/app/models/concerns/dorsale/search.rb +30 -0
  22. data/app/models/dorsale/alexandrie/attachment.rb +7 -6
  23. data/app/models/dorsale/application_record.rb +6 -0
  24. data/app/models/dorsale/billing_machine/invoice.rb +2 -6
  25. data/app/models/dorsale/billing_machine/quotation.rb +4 -4
  26. data/app/models/dorsale/customer_vault/person.rb +0 -2
  27. data/app/models/dorsale/expense_gun/expense.rb +8 -8
  28. data/app/models/dorsale/flyboy/task.rb +5 -16
  29. data/app/pdfs/concerns/dorsale/alexandrie/prawn/render_with_attachments.rb +13 -0
  30. data/app/pdfs/dorsale/billing_machine/invoice_single_vat_pdf.rb +6 -1
  31. data/app/pdfs/dorsale/billing_machine/quotation_pdf_common_methods.rb +0 -18
  32. data/app/policies/dorsale/expense_gun/expense_policy_helper.rb +1 -1
  33. data/app/policies/dorsale/flyboy/task_policy_helper.rb +0 -10
  34. data/app/policies/dorsale/policy_checker.rb +0 -1
  35. data/app/services/dorsale/billing_machine/pdf_file_generator.rb +37 -0
  36. data/app/services/dorsale/expense_gun/expense/copy.rb +1 -1
  37. data/app/uploaders/dorsale/pdf_uploader.rb +5 -0
  38. data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -1
  39. data/app/views/dorsale/billing_machine/invoices/_list.html.slim +1 -2
  40. data/app/views/dorsale/billing_machine/invoices/index.pdf.ruby +2 -2
  41. data/app/views/dorsale/billing_machine/invoices/show.pdf.ruby +1 -1
  42. data/app/views/dorsale/billing_machine/quotations/_list.html.slim +1 -2
  43. data/app/views/dorsale/billing_machine/quotations/show.pdf.ruby +1 -1
  44. data/app/views/dorsale/comments/_comment.html.slim +1 -1
  45. data/app/views/dorsale/customer_vault/links/new.html.slim +1 -1
  46. data/app/views/dorsale/customer_vault/people/_list_item.html.slim +1 -1
  47. data/app/views/dorsale/flyboy/tasks/_form.html.slim +3 -0
  48. data/app/views/dorsale/flyboy/tasks/_index_actions.html.slim +3 -0
  49. data/app/views/dorsale/flyboy/tasks/_list.html.slim +6 -12
  50. data/app/views/dorsale/flyboy/tasks/_summary_list.html.slim +2 -3
  51. data/app/views/dorsale/flyboy/tasks/_taskable_context.html.slim +1 -1
  52. data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +2 -4
  53. data/config/locales/billing_machine.en.yml +1 -0
  54. data/config/locales/billing_machine.fr.yml +1 -0
  55. data/config/locales/common.en.yml +3 -3
  56. data/config/locales/expense_gun.fr.yml +12 -12
  57. data/config/locales/flyboy.en.yml +1 -28
  58. data/config/locales/flyboy.fr.yml +1 -28
  59. data/config/routes.rb +0 -7
  60. data/db/migrate/20170127131537_delete_folders.rb +10 -0
  61. data/db/migrate/20170127151610_fix_expense_state.rb +6 -0
  62. data/db/migrate/20170127155636_billing_machine_add_pdf_file.rb +16 -0
  63. data/features/expense_gun_expenses.feature +3 -3
  64. data/features/flyboy_task_comments.feature +1 -1
  65. data/features/flyboy_tasks.feature +3 -4
  66. data/features/flyboy_tasks_summary.feature +0 -1
  67. data/features/step_definitions/billing_machine_invoices_steps.rb +1 -0
  68. data/features/step_definitions/expense_gun_expenses_steps.rb +2 -2
  69. data/features/step_definitions/flyboy_tasks_steps.rb +2 -3
  70. data/features/step_definitions/tasks_summary_steps.rb +3 -3
  71. data/lib/dorsale/active_record_comma_type_cast.rb +12 -0
  72. data/lib/dorsale/core_and_rails_ext.rb +3 -0
  73. data/lib/dorsale/engine.rb +6 -10
  74. data/lib/dorsale/form_back_url.rb +3 -1
  75. data/lib/dorsale/version.rb +1 -1
  76. data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +4 -1
  77. data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +7 -30
  78. data/spec/factories/flyboy_tasks.rb +0 -2
  79. data/spec/helpers/dorsale/flyboy/application_helper_spec.rb +0 -64
  80. data/spec/helpers/dorsale/sorting_helper_spec.rb +74 -0
  81. data/spec/libs/{active_record_comma_type_cast_spec.rb → dorsale/active_record_comma_type_cast_spec.rb} +1 -1
  82. data/spec/libs/dorsale/polymorphic_id_spec.rb +8 -7
  83. data/spec/models/{dorsale → concerns/dorsale}/model_i18n_spec.rb +0 -0
  84. data/spec/models/dorsale/expense_gun/expense_spec.rb +19 -19
  85. data/spec/models/dorsale/flyboy/task_spec.rb +2 -1
  86. data/spec/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf_spec.rb +18 -13
  87. data/spec/pdfs/dorsale/billing_machine/invoice_single_vat_pdf_spec.rb +18 -13
  88. data/spec/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf_spec.rb +18 -13
  89. data/spec/pdfs/dorsale/billing_machine/quotation_single_vat_pdf_spec.rb +25 -19
  90. data/spec/services/dorsale/expense_gun/expense/copy_spec.rb +1 -1
  91. metadata +21 -52
  92. data/app/controllers/dorsale/flyboy/folders_controller.rb +0 -140
  93. data/app/filters/dorsale/flyboy/small_data/filter_for_folders.rb +0 -5
  94. data/app/filters/dorsale/flyboy/small_data/filter_strategy_by_status.rb +0 -9
  95. data/app/models/dorsale/flyboy/folder.rb +0 -72
  96. data/app/policies/dorsale/flyboy/folder_policy_helper.rb +0 -26
  97. data/app/views/dorsale/flyboy/folders/_context.html.slim +0 -18
  98. data/app/views/dorsale/flyboy/folders/_context_actions.html.slim +0 -10
  99. data/app/views/dorsale/flyboy/folders/_form.html.slim +0 -17
  100. data/app/views/dorsale/flyboy/folders/_index_actions.html.slim +0 -2
  101. data/app/views/dorsale/flyboy/folders/_list.html.slim +0 -41
  102. data/app/views/dorsale/flyboy/folders/edit.html.slim +0 -8
  103. data/app/views/dorsale/flyboy/folders/index.html.slim +0 -22
  104. data/app/views/dorsale/flyboy/folders/new.html.slim +0 -2
  105. data/app/views/dorsale/flyboy/folders/show.html.slim +0 -14
  106. data/features/flyboy_folders.feature +0 -109
  107. data/features/step_definitions/flyboy_folders_steps.rb +0 -170
  108. data/lib/active_record_comma_type_cast.rb +0 -12
  109. data/lib/dorsale/alexandrie/prawn.rb +0 -17
  110. data/lib/dorsale/model_i18n.rb +0 -30
  111. data/lib/dorsale/model_to_s.rb +0 -13
  112. data/lib/dorsale/search.rb +0 -34
  113. data/spec/controllers/dorsale/flyboy/folders_controller_spec.rb +0 -113
  114. data/spec/factories/flyboy_folders.rb +0 -7
  115. data/spec/models/dorsale/flyboy/folder_spec.rb +0 -103
  116. data/spec/routing/dorsale/flyboy/folders_routing_spec.rb +0 -44
@@ -1,5 +0,0 @@
1
- class Dorsale::Flyboy::SmallData::FilterForFolders < ::Dorsale::SmallData::Filter
2
- STRATEGIES = {
3
- "fb_status" => ::Dorsale::Flyboy::SmallData::FilterStrategyByStatus.new,
4
- }
5
- end
@@ -1,9 +0,0 @@
1
- class Dorsale::Flyboy::SmallData::FilterStrategyByStatus < ::Dorsale::SmallData::FilterStrategy
2
- def apply(query, value)
3
- if value == "closed"
4
- query.where(status: "closed")
5
- else
6
- query.where.not(status: "closed")
7
- end
8
- end
9
- end
@@ -1,72 +0,0 @@
1
- require "dorsale/search"
2
- require "dorsale/polymorphic_id"
3
-
4
- class Dorsale::Flyboy::Folder < ::Dorsale::ApplicationRecord
5
- self.table_name = "dorsale_flyboy_folders"
6
-
7
- include AASM
8
- include ::Dorsale::Search
9
-
10
- paginates_per 50
11
-
12
- aasm(column: "status", whiny_transitions: false) do
13
- state :open, initial: true
14
- state :closed
15
-
16
- event :close, if: :no_undone_tasks? do
17
- transitions from: [:open], to: :closed
18
- end
19
-
20
- event :open do
21
- transitions from: [:closed], to: :open
22
- end
23
- end
24
-
25
- belongs_to :folderable, polymorphic: true
26
- has_many :tasks, dependent: :destroy, as: :taskable
27
-
28
- validates :name, presence: true
29
- validates :status, inclusion: {
30
- in: proc { ::Dorsale::Flyboy::Folder.aasm.states.map(&:to_s) }
31
- }
32
-
33
- def assign_default_values
34
- assign_default :progress, 0
35
- end
36
-
37
- def no_undone_tasks?
38
- tasks.where(done: false).count == 0
39
- end
40
-
41
- def revision
42
- "#{tracking} #{version}"
43
- end
44
-
45
- before_create :create_tracking
46
-
47
- def create_tracking
48
- dailycounter = self.class.where("DATE(created_at) = ?", Time.zone.now.to_date).count + 1
49
- self.tracking = "#{Time.zone.now.strftime("%y%m%d")}-#{dailycounter}"
50
- end
51
-
52
- before_save :update_version
53
-
54
- def update_version
55
- self.version = 0 if self.version.nil?
56
- self.version = self.version + 1
57
- end
58
-
59
- def update_progress
60
- if tasks.count.zero?
61
- self.progress = 0
62
- else
63
- self.progress = tasks.sum(:progress) / tasks.count
64
- end
65
- end
66
-
67
- def update_progress!
68
- update_progress
69
- save
70
- end
71
-
72
- end
@@ -1,26 +0,0 @@
1
- module Dorsale::Flyboy::FolderPolicyHelper
2
- POLICY_METHODS = [
3
- :list?,
4
- :create?,
5
- :read?,
6
- :update?,
7
- :delete?,
8
- :open?,
9
- :close?,
10
- ]
11
-
12
- def update?
13
- return false if folder.closed?
14
- super
15
- end
16
-
17
- def close?
18
- return false unless folder.may_close?
19
- super
20
- end
21
-
22
- def open?
23
- return false unless folder.may_open?
24
- super
25
- end
26
- end
@@ -1,18 +0,0 @@
1
- - folder = folder || taskable
2
-
3
- .context
4
- .context-header
5
- = icon :tasks
6
- = " "
7
- = folder
8
-
9
- .context-body
10
- = info folder, :progress, progress_bar(percentage: folder.progress, label: true)
11
- = info folder, :revision
12
- = info folder, :status
13
-
14
- - if request.path == dorsale.flyboy_folder_path(folder)
15
- = info folder, :description, helper: :text2html
16
-
17
- .context-footer
18
- = render "dorsale/flyboy/folders/context_actions", folder: folder
@@ -1,10 +0,0 @@
1
- = actions_for(folder)
2
-
3
- - if policy(folder.tasks.new).create? && request.path == dorsale.flyboy_folder_path(folder)
4
- = create_button dorsale.new_flyboy_task_path(taskable_guid: folder.guid), text: t("actions.new_task")
5
-
6
- - if policy(folder).close?
7
- = lock_button dorsale.close_flyboy_folder_path(folder), text: t("actions.close")
8
-
9
- - if policy(folder).open?
10
- = unlock_button dorsale.open_flyboy_folder_path(folder), text: t("actions.open")
@@ -1,17 +0,0 @@
1
- .panel.panel-default
2
- .panel-heading: .panel-title
3
- = icon :tasks
4
- = " "
5
- - if @folder.persisted?
6
- = t("actions.update")
7
- = " : "
8
- = @folder
9
- - else
10
- = t('messages.folders.title_create')
11
-
12
- .panel-body
13
- = horizontal_form_for @folder, as: :folder do |f|
14
- = f.input :name
15
- = f.input :description
16
-
17
- = form_buttons
@@ -1,2 +0,0 @@
1
- - if policy(::Dorsale::Flyboy::Folder).create?
2
- = create_button dorsale.new_flyboy_folder_path
@@ -1,41 +0,0 @@
1
- table#folders-list
2
- thead
3
- tr
4
- th.folder-status
5
- = sortable_column Dorsale::Flyboy::Folder.t(:status), column: "status"
6
-
7
- th.folder-progress.hidden-xs.hidden-xs
8
- = sortable_column Dorsale::Flyboy::Folder.t(:progress), column: "progress"
9
-
10
- th.folder-name
11
- = sortable_column Dorsale::Flyboy::Folder.t, column: "name"
12
-
13
- th.actions
14
- = t("actions.actions")
15
-
16
- tbody
17
- - folders.each do |folder|
18
- tr.folder class=folder_color(folder)
19
- td.folder-status
20
- - if folder.status.to_s == "open"
21
- = icon(:unlock)
22
- - elsif folder.status.to_s == "closed"
23
- = icon(:lock)
24
- - else
25
- = icon(:question)
26
-
27
- = " "
28
- = folder.t("status.#{folder.status}")
29
-
30
- td.folder-progress.hidden-xs
31
- = progress_bar percentage: folder.progress, label: true
32
-
33
- td.folder-name
34
- - if policy(folder).read?
35
- = link_to folder, dorsale.flyboy_folder_path(folder)
36
- - else
37
- = folder
38
-
39
- td.actions
40
- - if policy(Dorsale::Flyboy::Task.new(taskable: folder)).create?
41
- = create_button dorsale.new_flyboy_task_path(taskable_guid: folder.guid), text: t("actions.new_task")
@@ -1,8 +0,0 @@
1
- .flyboy
2
- - content_for :context
3
- = render "dorsale/flyboy/folders/context", folder: @folder
4
-
5
- - content_for :page_body
6
- = render "dorsale/flyboy/folders/form"
7
-
8
- = render_dorsale_page
@@ -1,22 +0,0 @@
1
- .flyboy
2
- - content_for :title
3
- = icon(:tasks)
4
- = " "
5
- = ::Dorsale::Flyboy::Folder.ts
6
-
7
- - content_for :filters
8
- = render "dorsale/flyboy/filters"
9
-
10
- - content_for :search
11
- = search_form
12
-
13
- - content_for :actions
14
- = render "dorsale/flyboy/folders/index_actions"
15
-
16
- - content_for :table
17
- = render "dorsale/flyboy/folders/list", folders: @folders
18
-
19
- - content_for :pagination
20
- = paginate @folders
21
-
22
- = render_dorsale_page
@@ -1,2 +0,0 @@
1
- .flyboy
2
- = render "dorsale/flyboy/folders/form"
@@ -1,14 +0,0 @@
1
- .flyboy
2
- - content_for :title
3
- = icon :check_square_o
4
- = " "
5
- = ::Dorsale::Flyboy::Task.ts
6
-
7
- - content_for :context
8
- = render "dorsale/flyboy/folders/context", folder: @folder
9
-
10
- - content_for :page_body
11
- .tasks
12
- = tasks_for @folder
13
-
14
- = render_dorsale_page
@@ -1,109 +0,0 @@
1
- @javascript
2
- Feature: Manage folders
3
- Background:
4
- Given an authenticated user
5
-
6
- Scenario: Create a folder
7
- When I go to the folders section
8
- And I create a new folder
9
- Then I am on the created folder
10
- And the folder is created
11
- And the folder is opened
12
-
13
- Scenario: Read a folder
14
- Given an existing folder
15
- And 3 tasks in this folder
16
- When I consult this folder
17
- Then I see this folder
18
- And I see the folder tasks
19
-
20
- Scenario: Update a folder
21
- Given an existing folder
22
- When I go to the folders section
23
- And I update this folder
24
- Then I am on the updated folder
25
- And the folder is updated
26
-
27
- Scenario: Delete a folder
28
- Given an existing folder
29
- When I go to the folders section
30
- And I delete this folder
31
- Then I am on the folders section
32
- And the folder is deleted
33
-
34
- Scenario: Close a folder
35
- Given an existing folder
36
- When I close this folder
37
- Then I am on the folders section
38
- And the folder is closed
39
-
40
- Scenario: Reopen a folder
41
- Given an existing closed folder
42
- When I reopen this folder
43
- Then I am on this folder
44
- And the folder is opened
45
-
46
- Scenario: Filter folders
47
- Given an existing open folder
48
- And an existing closed folder
49
- When I go to the folders section
50
- And I filter folders by open
51
- Then only open folders appear
52
- When I filter folders by closed
53
- Then only closed folders appear
54
- When I reset filters
55
- Then all folders appear
56
-
57
- Scenario: Search folders
58
- Given an existing folder named "Hello"
59
- And an existing folder named "World"
60
- When I go to the folders section
61
- And I search "Hello"
62
- Then only the "Hello" folder appear
63
-
64
- Scenario: Folders pagination
65
- Given 100 existing folders
66
- When I go to the folders section
67
- Then folders are paginated
68
-
69
- Scenario: Filter by name asc
70
- Given an existing folder
71
- Given 3 tasks to sort in this folder
72
- When I consult this folder
73
- And I sort tasks by "name" "asc"
74
- Then tasks are sorted by "name" "asc"
75
-
76
- Scenario: Filter by name desc
77
- Given an existing folder
78
- Given 3 tasks to sort in this folder
79
- When I consult this folder
80
- And I sort tasks by "name" "desc"
81
- Then tasks are sorted by "name" "desc"
82
-
83
- Scenario: Filter by progress asc
84
- Given an existing folder
85
- Given 3 tasks to sort in this folder
86
- When I consult this folder
87
- And I sort tasks by "progress" "asc"
88
- Then tasks are sorted by "progress" "asc"
89
-
90
- Scenario: Filter by progress desc
91
- Given an existing folder
92
- Given 3 tasks to sort in this folder
93
- When I consult this folder
94
- And I sort tasks by "progress" "desc"
95
- Then tasks are sorted by "progress" "desc"
96
-
97
- Scenario: Filter by term asc
98
- Given an existing folder
99
- Given 3 tasks to sort in this folder
100
- When I consult this folder
101
- And I sort tasks by "term" "asc"
102
- Then tasks are sorted by "term" "asc"
103
-
104
- Scenario: Filter by term desc
105
- Given an existing folder
106
- Given 3 tasks to sort in this folder
107
- When I consult this folder
108
- And I sort tasks by "term" "desc"
109
- Then tasks are sorted by "term" "desc"
@@ -1,170 +0,0 @@
1
- When(/^I go to the folders section$/) do
2
- visit dorsale.flyboy_folders_path
3
- end
4
-
5
- When(/^I create a new folder$/) do
6
- find("a[href$='folders/new']").click
7
- fill_in "folder_name", with: "I-am-the-folder-title"
8
- fill_in "folder_description", with: "I-am-the-folder-description"
9
- find("form[id*=folder] [type=submit]").click
10
- end
11
-
12
- Then(/^I am on this folder$/) do
13
- expect(current_path).to eq dorsale.flyboy_folder_path(@folder)
14
- end
15
-
16
- Then(/^I am on the created folder$/) do
17
- @folder = Dorsale::Flyboy::Folder.last_created
18
- expect(current_path).to eq dorsale.flyboy_folder_path(@folder)
19
- end
20
-
21
- Then(/^the folder is created$/) do
22
- expect(page).to have_content "I-am-the-folder-title"
23
- end
24
-
25
- Then(/^the folder is opened$/) do
26
- expect(page).to have_content "Ouvert"
27
- end
28
-
29
- Given(/^an existing folder$/) do
30
- @folder = create(:flyboy_folder)
31
- end
32
-
33
- Given(/^(\d+) tasks in this folder$/) do |n|
34
- n.to_i.times do
35
- create(:flyboy_task, taskable: @folder)
36
- end
37
- end
38
-
39
- When(/^I consult this folder$/) do
40
- visit dorsale.flyboy_folders_path
41
- click_link @folder.name
42
- end
43
-
44
- Then(/^I see this folder$/) do
45
- expect(current_path).to eq dorsale.flyboy_folder_path(@folder)
46
- expect(page).to have_content @folder.name
47
- expect(page).to have_content @folder.description
48
- expect(page).to have_content @folder.tracking
49
- end
50
-
51
- Then(/^I see the folder tasks$/) do
52
- @folder.tasks.map do |task|
53
- expect(page).to have_content task.name
54
- end
55
- end
56
-
57
- When(/^I update this folder$/) do
58
- click_link @folder.name
59
- find("a[href$='folders/#{@folder.id}/edit']").click
60
- fill_in "folder_name", with: "New-folder-title"
61
- find("form[id*=folder] [type=submit]").click
62
- end
63
-
64
- Then(/^I am on the updated folder$/) do
65
- expect(current_path).to eq dorsale.flyboy_folder_path(@folder)
66
- end
67
-
68
- Then(/^the folder is updated$/) do
69
- expect(page).to have_content "New-folder-title"
70
- end
71
-
72
- When(/^I delete this folder$/) do
73
- click_link @folder.name
74
- find("a[href$='folders/#{@folder.id}/edit']").click
75
- find(".context a[data-method=delete]").click
76
- end
77
-
78
- Then(/^I am on the folders section$/) do
79
- expect(current_path).to eq dorsale.flyboy_folders_path
80
- end
81
-
82
- Then(/^the folder is deleted$/) do
83
- expect(page).to have_no_content @folder.name
84
- end
85
-
86
- When(/^I close this folder$/) do
87
- visit dorsale.flyboy_folder_path(@folder)
88
- find("a[href$='folders/#{@folder.id}/close']").click
89
- end
90
-
91
- Then(/^the folder is closed$/) do
92
- expect(page).to have_content "Fermé"
93
- end
94
-
95
- Given(/^an existing closed folder$/) do
96
- @closed_folder = create(:flyboy_folder, status: "closed")
97
- @folder = @closed_folder
98
- end
99
-
100
- When(/^I reopen this folder$/) do
101
- visit dorsale.flyboy_folder_path(@folder)
102
- find("a[href$='folders/#{@folder.id}/open']").click
103
- end
104
-
105
- Given(/^an existing open folder$/) do
106
- @open_folder = create(:flyboy_folder, status: "open")
107
- @folder = @open_folder
108
- end
109
-
110
- When(/^I filter folders by open$/) do
111
- select "Ouvert"
112
- find(".filters [type=submit]:last-child").click
113
- end
114
-
115
- Then(/^only open folders appear$/) do
116
- expect(page).to have_content @open_folder.name
117
- expect(page).to have_no_content @closed_folder.name
118
- end
119
-
120
- When(/^I filter folders by closed$/) do
121
- select Dorsale::Flyboy::Folder.t("status.closed")
122
- find(".filters [type=submit]:last-child").click
123
- end
124
-
125
- Then(/^only closed folders appear$/) do
126
- expect(page).to have_content @closed_folder.name
127
- expect(page).to have_no_content @open_folder.name
128
- end
129
-
130
- Then(/^all folders appear$/) do
131
- expect(page).to have_content @open_folder.name
132
- expect(page).to have_content @closed_folder.name
133
- end
134
-
135
- Given(/^an existing folder named "(.*?)"$/) do |name|
136
- create(:flyboy_folder, name: name)
137
- end
138
-
139
- Then(/^only the "Hello" folder appear$/) do
140
- expect(page).to have_content "Hello"
141
- expect(page).to have_no_content "World"
142
- end
143
-
144
- Given(/^(\d+) existing folders$/) do |n|
145
- n.to_i.times do
146
- create(:flyboy_folder)
147
- end
148
- end
149
-
150
- Then(/^folders are paginated$/) do
151
- expect(all("tr.folder").count).to eq 50
152
- expect(page).to have_selector ".pagination"
153
- end
154
-
155
- Given(/^(\d+) tasks to sort in this folder$/) do |n|
156
- n.to_i.times do
157
- create(:flyboy_task, taskable: @folder)
158
- end
159
- end
160
-
161
- When(/^I sort tasks by "(.*?)" "(.*?)"$/) do |column, direction|
162
- sort = direction == "desc" ? "-#{column}" : "#{column}"
163
- visit dorsale.flyboy_folder_path(@folder, sort: sort)
164
- end
165
-
166
- Then(/^tasks are sorted by "(.*?)" "(.*?)"$/) do |column, direction|
167
- page_names = all("tbody td.task-name").map(&:text)
168
- expected_name = @folder.tasks.reorder(column => direction).pluck(:name)
169
- expect(page_names).to eq expected_name
170
- end