dorsale 3.1.7 → 3.2.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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/app/assets/javascripts/dorsale/common/comments.coffee +18 -20
  4. data/app/assets/javascripts/dorsale/common/datepicker.coffee +1 -1
  5. data/app/assets/javascripts/dorsale/common/forms.coffee +1 -1
  6. data/app/assets/javascripts/dorsale/common/modals.coffee +1 -1
  7. data/app/assets/javascripts/dorsale/common/tabs_loader.coffee +1 -1
  8. data/app/assets/javascripts/dorsale/common/tags.coffee +1 -1
  9. data/app/assets/javascripts/dorsale/common/tooltips.coffee +1 -1
  10. data/app/assets/javascripts/dorsale/dependencies.coffee +2 -0
  11. data/app/assets/javascripts/dorsale/engines/billing_machine.coffee +1 -1
  12. data/app/assets/stylesheets/dorsale/all.sass +1 -1
  13. data/app/assets/stylesheets/dorsale/common/comments.sass +1 -1
  14. data/app/assets/stylesheets/dorsale/common/filters.sass +16 -1
  15. data/app/assets/stylesheets/dorsale/common/styles.sass +3 -0
  16. data/app/assets/stylesheets/dorsale/engines/customer_vault.sass +2 -2
  17. data/app/assets/stylesheets/dorsale/engines/expense_gun.sass +3 -0
  18. data/app/assets/stylesheets/dorsale/engines/flyboy.sass +4 -0
  19. data/app/assets/stylesheets/dorsale/print.sass +73 -0
  20. data/app/controllers/dorsale/alexandrie/attachments_controller.rb +0 -4
  21. data/app/controllers/dorsale/application_controller.rb +12 -0
  22. data/app/controllers/dorsale/billing_machine/application_controller.rb +0 -5
  23. data/app/controllers/dorsale/billing_machine/id_cards_controller.rb +0 -4
  24. data/app/controllers/dorsale/billing_machine/invoices_controller.rb +0 -4
  25. data/app/controllers/dorsale/billing_machine/payment_terms_controller.rb +0 -4
  26. data/app/controllers/dorsale/billing_machine/quotations_controller.rb +0 -4
  27. data/app/controllers/dorsale/comments_controller.rb +30 -55
  28. data/app/controllers/dorsale/customer_vault/links_controller.rb +5 -5
  29. data/app/controllers/dorsale/customer_vault/people_controller.rb +9 -11
  30. data/app/controllers/dorsale/expense_gun/categories_controller.rb +0 -4
  31. data/app/controllers/dorsale/expense_gun/expenses_controller.rb +1 -5
  32. data/app/controllers/dorsale/flyboy/folders_controller.rb +0 -4
  33. data/app/controllers/dorsale/flyboy/tasks_controller.rb +0 -4
  34. data/app/controllers/dorsale/users_controller.rb +7 -11
  35. data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_customer.rb +1 -1
  36. data/app/filters/dorsale/flyboy/small_data/filter_for_tasks.rb +1 -1
  37. data/app/helpers/dorsale/all_helpers.rb +1 -0
  38. data/app/helpers/dorsale/billing_machine/application_helper.rb +23 -0
  39. data/app/helpers/dorsale/comments_helper.rb +14 -2
  40. data/app/helpers/dorsale/flyboy/application_helper.rb +4 -0
  41. data/app/helpers/dorsale/text_helper.rb +12 -7
  42. data/app/libs/dorsale/sortable_uuid_generator.rb +11 -0
  43. data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +2 -4
  44. data/app/models/concerns/dorsale/active_record_uuid_concern.rb +15 -0
  45. data/app/models/concerns/dorsale/default_values_concern.rb +13 -0
  46. data/app/models/dorsale/alexandrie/attachment.rb +3 -3
  47. data/app/models/dorsale/application_record.rb +11 -0
  48. data/app/models/dorsale/billing_machine/invoice.rb +13 -13
  49. data/app/models/dorsale/billing_machine/invoice_line.rb +3 -9
  50. data/app/models/dorsale/billing_machine/quotation.rb +6 -12
  51. data/app/models/dorsale/billing_machine/quotation_line.rb +3 -8
  52. data/app/models/dorsale/customer_vault/person.rb +5 -4
  53. data/app/models/dorsale/expense_gun/expense.rb +3 -4
  54. data/app/models/dorsale/expense_gun/expense_line.rb +4 -5
  55. data/app/models/dorsale/flyboy/folder.rb +2 -3
  56. data/app/models/dorsale/flyboy/task.rb +5 -6
  57. data/app/models/dorsale/flyboy/task_comment.rb +3 -8
  58. data/app/models/dorsale/users/active.rb +1 -1
  59. data/app/policies/dorsale/billing_machine/invoice_policy_helper.rb +5 -0
  60. data/app/policies/dorsale/comment_policy_helper.rb +21 -0
  61. data/app/serializers/dorsale/serializers/xlsx.rb +13 -2
  62. data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -1
  63. data/app/views/dorsale/billing_machine/invoices/_filters.html.slim +1 -1
  64. data/app/views/dorsale/billing_machine/invoices/_form.html.slim +1 -1
  65. data/app/views/dorsale/billing_machine/invoices/_header_infos.html.slim +9 -4
  66. data/app/views/dorsale/billing_machine/invoices/_list.html.slim +3 -2
  67. data/app/views/dorsale/billing_machine/invoices/email.html.slim +6 -0
  68. data/app/views/dorsale/billing_machine/invoices/index.html.slim +1 -1
  69. data/app/views/dorsale/billing_machine/invoices/index.xlsx.ruby +41 -0
  70. data/app/views/dorsale/billing_machine/quotations/_filters.html.slim +1 -1
  71. data/app/views/dorsale/billing_machine/quotations/_list.html.slim +4 -3
  72. data/app/views/dorsale/comments/_comment.html.slim +2 -2
  73. data/app/views/dorsale/comments/_comments.html.slim +5 -0
  74. data/app/views/dorsale/comments/_form.html.slim +5 -6
  75. data/app/views/dorsale/comments/_list.html.slim +1 -1
  76. data/app/views/dorsale/comments/edit.html.slim +1 -1
  77. data/app/views/dorsale/customer_vault/links/edit.html.slim +13 -17
  78. data/app/views/dorsale/customer_vault/links/index.html.slim +10 -0
  79. data/app/views/dorsale/customer_vault/links/new.html.slim +10 -14
  80. data/app/views/dorsale/customer_vault/people/_actions.html.slim +2 -2
  81. data/app/views/dorsale/customer_vault/people/_data_context.html.slim +1 -1
  82. data/app/views/dorsale/customer_vault/people/_index_tabs.html.slim +2 -2
  83. data/app/views/dorsale/customer_vault/people/_show_layout.html.slim +10 -0
  84. data/app/views/dorsale/customer_vault/people/_tabs.html.slim +24 -0
  85. data/app/views/dorsale/customer_vault/people/activity.slim +2 -3
  86. data/app/views/dorsale/customer_vault/people/edit.html.slim +1 -0
  87. data/app/views/dorsale/customer_vault/people/index.html.slim +2 -2
  88. data/app/views/dorsale/customer_vault/people/index.xlsx.ruby +49 -0
  89. data/app/views/dorsale/customer_vault/people/invoices.html.slim +5 -0
  90. data/app/views/dorsale/customer_vault/people/show.html.slim +5 -26
  91. data/app/views/dorsale/customer_vault/people/tasks.html.slim +4 -0
  92. data/app/views/dorsale/expense_gun/categories/_list.html.slim +4 -1
  93. data/app/views/dorsale/expense_gun/expenses/_list.html.slim +1 -1
  94. data/app/views/dorsale/expense_gun/expenses/show.html.slim +3 -3
  95. data/app/views/dorsale/flyboy/_filters.html.slim +3 -0
  96. data/app/views/dorsale/flyboy/folders/_form.html.slim +3 -1
  97. data/app/views/dorsale/flyboy/folders/_list.html.slim +2 -2
  98. data/app/views/dorsale/flyboy/task_comments/_list.html.slim +2 -2
  99. data/app/views/dorsale/flyboy/tasks/_form.html.slim +4 -1
  100. data/app/views/dorsale/flyboy/tasks/_list.html.slim +1 -1
  101. data/app/views/dorsale/flyboy/tasks/_summary_list.html.slim +6 -5
  102. data/app/views/dorsale/flyboy/tasks/index.html.slim +2 -4
  103. data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +23 -0
  104. data/app/views/dorsale/flyboy/tasks/summary.html.slim +0 -2
  105. data/config/locales/common.en.yml +2 -0
  106. data/config/locales/common.fr.yml +2 -0
  107. data/config/locales/customer_vault.en.yml +0 -6
  108. data/config/locales/customer_vault.fr.yml +0 -6
  109. data/config/locales/flyboy.en.yml +2 -0
  110. data/config/locales/flyboy.fr.yml +2 -0
  111. data/config/routes.rb +7 -2
  112. data/db/migrate/20161118071317_dorsale_add_missing_indexes.rb +25 -0
  113. data/features/billing_machine_invoices.feature +4 -2
  114. data/features/customer_vault_invoices.feature +10 -0
  115. data/features/customer_vault_tasks.feature +1 -1
  116. data/features/flyboy_tasks.feature +3 -15
  117. data/features/step_definitions/billing_machine_invoices_steps.rb +2 -6
  118. data/features/step_definitions/billing_machine_quotations_steps.rb +5 -5
  119. data/features/step_definitions/common_steps.rb +7 -1
  120. data/features/step_definitions/customer_vault_corporations_steps.rb +7 -7
  121. data/features/step_definitions/customer_vault_filters_steps.rb +3 -3
  122. data/features/step_definitions/customer_vault_individuals_steps.rb +1 -1
  123. data/features/step_definitions/customer_vault_invoices_steps.rb +7 -0
  124. data/features/step_definitions/customer_vault_links_steps.rb +5 -3
  125. data/features/step_definitions/customer_vault_people_steps.rb +1 -1
  126. data/features/step_definitions/customer_vault_search_steps.rb +4 -4
  127. data/features/step_definitions/customer_vault_tasks_steps.rb +6 -16
  128. data/features/step_definitions/expense_gun_expenses_steps.rb +2 -2
  129. data/features/step_definitions/flyboy_folders_steps.rb +5 -5
  130. data/features/step_definitions/flyboy_tasks_steps.rb +5 -29
  131. data/lib/dorsale/engine.rb +6 -1
  132. data/lib/dorsale/polymorphic_id.rb +1 -1
  133. data/lib/dorsale/version.rb +1 -1
  134. data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +3 -4
  135. data/spec/controllers/dorsale/comments_controller_spec.rb +3 -3
  136. data/spec/controllers/dorsale/expense_gun/expenses_controller_spec.rb +10 -0
  137. data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +1 -13
  138. data/spec/factories/dorsale_comments.rb +3 -3
  139. data/spec/helpers/dorsale/text_helper_spec.rb +15 -0
  140. data/spec/{lib → libs}/active_record_comma_type_cast_spec.rb +0 -0
  141. data/spec/{lib → libs/dorsale}/polymorphic_id_spec.rb +0 -0
  142. data/spec/libs/dorsale/sortable_uuid_generator_spec.rb +29 -0
  143. data/spec/rails_helper.rb +2 -0
  144. data/spec/routing/dorsale/customer_vault/people_routing_spec.rb +15 -0
  145. metadata +54 -18
  146. data/app/pdfs/dorsale/flyboy/roadmap.rb +0 -47
  147. data/app/views/dorsale/billing_machine/invoices/index.csv.ruby +0 -46
  148. data/app/views/dorsale/comments/_loader.html.slim +0 -5
  149. data/app/views/dorsale/comments/index.html.slim +0 -11
  150. data/app/views/dorsale/customer_vault/people/_activity_tab.html.slim +0 -4
  151. data/app/views/dorsale/customer_vault/people/_comment.html.slim +0 -1
  152. data/app/views/dorsale/customer_vault/people/_links_tab.html.slim +0 -7
  153. data/app/views/dorsale/customer_vault/people/_tasks_tab.html.slim +0 -1
  154. data/app/views/dorsale/customer_vault/people/index.xls.slim +0 -24
  155. data/app/views/dorsale/flyboy/tasks/index.csv.ruby +0 -24
  156. data/app/views/dorsale/flyboy/tasks/index.pdf.ruby +0 -6
  157. data/app/views/dorsale/flyboy/tasks/index.xls.erb +0 -29
@@ -1,5 +1,5 @@
1
1
  When(/^I export people list$/) do
2
- find("[href$=xls]").click
2
+ find("[href$=xlsx]").click
3
3
  end
4
4
 
5
5
  Then(/^the file is downloaded$/) do
@@ -23,8 +23,8 @@ Alors(/^this individual appear in search results$/) do
23
23
  end
24
24
 
25
25
  Alors(/^other individuals do not appear in search results$/) do
26
- expect(page).to_not have_content "Laurent"
27
- expect(page).to_not have_content "DURAND"
26
+ expect(page).to have_no_content "Laurent"
27
+ expect(page).to have_no_content "DURAND"
28
28
  end
29
29
 
30
30
  Lorsqu(/^he search an individual by last name$/) do
@@ -42,6 +42,6 @@ Alors(/^this corporation appear in search results$/) do
42
42
  end
43
43
 
44
44
  Alors(/^other corporations do not appear in search results$/) do
45
- expect(page).to_not have_content "zzz"
46
- expect(page).to_not have_content "contact@zzz.com"
45
+ expect(page).to have_no_content "zzz"
46
+ expect(page).to have_no_content "contact@zzz.com"
47
47
  end
@@ -1,10 +1,10 @@
1
1
  When(/^I go on the tasks section$/) do
2
- find("a[href='#tasks']").click
2
+ find("#person-tabs a[href$='tasks']").click
3
3
  end
4
4
 
5
5
  When(/^I create a task on this person$/) do
6
6
  @tasks_count = ::Dorsale::Flyboy::Task.count
7
- find("#tasks a[href*='tasks/new']").click
7
+ find("#context-main a[href*='tasks/new']").click
8
8
  fill_in :task_name, with: "YepYep"
9
9
  fill_in :task_description, with: "Trololo"
10
10
  find("[type=submit]").click
@@ -12,17 +12,9 @@ end
12
12
 
13
13
  Then(/^the person task is created$/) do
14
14
  expect(::Dorsale::Flyboy::Task.count).to eq(@tasks_count + 1)
15
- @task = ::Dorsale::Flyboy::Task.order(:id).last
16
-
17
- if @corporation
18
- url = dorsale.customer_vault_corporation_path(@corporation)
19
- elsif @individual
20
- url = dorsale.customer_vault_individual_path(@individual)
21
- else
22
- raise "invalid person"
23
- end
24
-
25
- expect(current_path).to eq url
15
+ @task = ::Dorsale::Flyboy::Task.last_created
16
+ person = @corporation || @individual || @person
17
+ expect(current_path).to eq dorsale.tasks_customer_vault_person_path(person)
26
18
  end
27
19
 
28
20
  Then(/^the task appear$/) do
@@ -38,7 +30,5 @@ When(/^I filter tasks$/) do
38
30
  end
39
31
 
40
32
  Then(/^I an redirected on the tasks tab$/) do
41
- expect(current_path).to eq dorsale.customer_vault_individual_path(@individual)
42
- hash = page.evaluate_script("location.href").split("#").last
43
- expect(hash).to eq "tasks"
33
+ expect(current_path).to eq dorsale.tasks_customer_vault_person_path(@individual)
44
34
  end
@@ -39,7 +39,7 @@ Then(/^the expense is created$/) do
39
39
  expect(Dorsale::ExpenseGun::Expense.count).to eq(@expenses_count + 1)
40
40
  expect(Dorsale::ExpenseGun::ExpenseLine.count).to eq(@expense_lines_count + 2)
41
41
 
42
- @expense = Dorsale::ExpenseGun::Expense.reorder(:id).last
42
+ @expense = Dorsale::ExpenseGun::Expense.last_created
43
43
 
44
44
  expect(@expense.name).to eq "ExpenseName"
45
45
  expect(@expense.expense_lines.first.name).to eq "ExpenseLine1Name"
@@ -131,5 +131,5 @@ end
131
131
 
132
132
  Then(/^an expense copy is created$/) do
133
133
  expect(Dorsale::ExpenseGun::Expense.count).to eq(@expenses_count + 1)
134
- @expense = Dorsale::ExpenseGun::Expense.reorder(:id).last
134
+ @expense = Dorsale::ExpenseGun::Expense.last_created
135
135
  end
@@ -14,7 +14,7 @@ Then(/^I am on this folder$/) do
14
14
  end
15
15
 
16
16
  Then(/^I am on the created folder$/) do
17
- @folder = Dorsale::Flyboy::Folder.order("id DESC").first
17
+ @folder = Dorsale::Flyboy::Folder.last_created
18
18
  expect(current_path).to eq dorsale.flyboy_folder_path(@folder)
19
19
  end
20
20
 
@@ -80,7 +80,7 @@ Then(/^I am on the folders section$/) do
80
80
  end
81
81
 
82
82
  Then(/^the folder is deleted$/) do
83
- expect(page).to_not have_content @folder.name
83
+ expect(page).to have_no_content @folder.name
84
84
  end
85
85
 
86
86
  When(/^I close this folder$/) do
@@ -114,7 +114,7 @@ end
114
114
 
115
115
  Then(/^only open folders appear$/) do
116
116
  expect(page).to have_content @open_folder.name
117
- expect(page).to_not have_content @closed_folder.name
117
+ expect(page).to have_no_content @closed_folder.name
118
118
  end
119
119
 
120
120
  When(/^I filter folders by closed$/) do
@@ -124,7 +124,7 @@ end
124
124
 
125
125
  Then(/^only closed folders appear$/) do
126
126
  expect(page).to have_content @closed_folder.name
127
- expect(page).to_not have_content @open_folder.name
127
+ expect(page).to have_no_content @open_folder.name
128
128
  end
129
129
 
130
130
  Then(/^all folders appear$/) do
@@ -138,7 +138,7 @@ end
138
138
 
139
139
  Then(/^only the "Hello" folder appear$/) do
140
140
  expect(page).to have_content "Hello"
141
- expect(page).to_not have_content "World"
141
+ expect(page).to have_no_content "World"
142
142
  end
143
143
 
144
144
  Given(/^(\d+) existing folders$/) do |n|
@@ -94,18 +94,6 @@ When(/^I snooze this task$/) do
94
94
  find("a[href*=snooze]").click
95
95
  end
96
96
 
97
- When(/^I export tasks to PDF$/) do
98
- find("a[href$=pdf]").click
99
- end
100
-
101
- When(/^I export tasks to CSV$/) do
102
- find("a[href$=csv]").click
103
- end
104
-
105
- When(/^I export tasks to XLS$/) do
106
- find("a[href$=xls]").click
107
- end
108
-
109
97
  When(/^I filter tasks by done$/) do
110
98
  select "Fermé"
111
99
  find(".filters [type=submit]:last-child").click
@@ -127,7 +115,7 @@ When(/^I delete this task$/) do
127
115
  end
128
116
 
129
117
  Then(/^I am on the created task$/) do
130
- @task = Dorsale::Flyboy::Task.order("id DESC").first
118
+ @task = Dorsale::Flyboy::Task.last_created
131
119
  expect(current_path).to eq dorsale.flyboy_task_path(@task)
132
120
  end
133
121
 
@@ -152,7 +140,7 @@ Then(/^I am on the tasks section$/) do
152
140
  end
153
141
 
154
142
  Then(/^the task is deleted$/) do
155
- expect(page).to_not have_content @task.name
143
+ expect(page).to have_no_content @task.name
156
144
  end
157
145
 
158
146
  Then(/^the task is completed$/) do
@@ -163,29 +151,17 @@ Then(/^the task is snoozed$/) do
163
151
  expect(all("a[href*=snooze]").count).to eq 0
164
152
  end
165
153
 
166
- Then(/^I download PDF file$/) do
167
- # Nothing to do, Rails raise if any problem
168
- end
169
-
170
- Then(/^I download CSV file$/) do
171
- # Nothing to do, Rails raise if any problem
172
- end
173
-
174
- Then(/^I download XLS file$/) do
175
- # Nothing to do, Rails raise if any problem
176
- end
177
-
178
154
  Then(/^I am on this task$/) do
179
155
  expect(current_path).to eq dorsale.flyboy_task_path(@task)
180
156
  end
181
157
 
182
158
  Then(/^only done tasks appear$/) do
183
159
  expect(page).to have_content @done_task.name
184
- expect(page).to_not have_content @undone_task.name
160
+ expect(page).to have_no_content @undone_task.name
185
161
  end
186
162
 
187
163
  Then(/^only undone tasks appear$/) do
188
- expect(page).to_not have_content @done_task.name
164
+ expect(page).to have_no_content @done_task.name
189
165
  expect(page).to have_content @undone_task.name
190
166
  end
191
167
 
@@ -197,7 +173,7 @@ end
197
173
 
198
174
  Then(/^only the "Hello" task appear$/) do
199
175
  expect(page).to have_content "Hello"
200
- expect(page).to_not have_content "World"
176
+ expect(page).to have_no_content "World"
201
177
  end
202
178
 
203
179
  Then(/^tasks are paginated$/) do
@@ -20,11 +20,12 @@ require "kaminari-i18n"
20
20
  require "carrierwave"
21
21
  require "aasm"
22
22
  require "handles_sortable_columns"
23
- require "csv"
24
23
  require "pdf/reader"
25
24
  require "prawn"
26
25
  require "prawn/table"
27
26
  require "combine_pdf"
27
+ require "nilify_blanks"
28
+ require "chartkick"
28
29
 
29
30
  if Rails.env.test? || Rails.env.development?
30
31
  require "pry"
@@ -57,6 +58,10 @@ module Dorsale
57
58
  end
58
59
  end
59
60
 
61
+ initializer "assets" do
62
+ Rails.application.config.assets.precompile += %w( dorsale/avatar.png )
63
+ end
64
+
60
65
  Mime::Type.register "application/vnd.ms-excel", :xls
61
66
  Mime::Type.register "application/vnd.ms-excel", :xlsx
62
67
  end
@@ -30,7 +30,7 @@ Module.new do
30
30
  def relation_guid=(guid)
31
31
  return self.relation = nil if guid.blank?
32
32
 
33
- type, id = guid.split("-")
33
+ type, id = guid.split("-", 2)
34
34
  self.relation = type.constantize.find(id)
35
35
  end
36
36
  end
@@ -1,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "3.1.7"
2
+ VERSION = "3.2.0"
3
3
  end
@@ -6,16 +6,15 @@ describe Dorsale::BillingMachine::InvoicesController, type: :controller do
6
6
  let(:user) { create(:user) }
7
7
  before(:each) { sign_in(user) }
8
8
 
9
- describe "CSV export" do
9
+ describe "XLSX export" do
10
10
  render_views
11
11
 
12
12
  it "should be ok" do
13
13
  3.times { create(:billing_machine_invoice_line) }
14
- get :index, params: {format: :csv}
14
+ get :index, params: {format: :xlsx}
15
15
  expect(response).to be_ok
16
- expect(response.body.split("\n").length).to eq 4 # headers + 3 invoices
17
16
  end
18
- end # describe "CSV export"
17
+ end # describe "XLSX export"
19
18
 
20
19
  describe "filters" do
21
20
  before do
@@ -8,11 +8,11 @@ describe Dorsale::CommentsController, type: :controller do
8
8
  before(:each) { sign_in(user) }
9
9
 
10
10
  let(:valid_params){
11
- commentable = DummyModel.create!(name: "A")
11
+ commentable = create(:customer_vault_corporation)
12
12
  {
13
- :commentable_id => commentable.id,
14
- :commentable_type => commentable.class.to_s,
15
13
  :comment => {
14
+ :commentable_id => commentable.id,
15
+ :commentable_type => commentable.class.to_s,
16
16
  :text => "Hello",
17
17
  },
18
18
  :back_url => "/",
@@ -30,6 +30,16 @@ RSpec.describe ::Dorsale::ExpenseGun::ExpensesController, type: :controller do
30
30
 
31
31
  expect(assigns :expenses).to eq [expense1]
32
32
  end
33
+
34
+ it "should assigns only users having expenses" do
35
+ user1 = create(:user)
36
+ user2 = create(:user)
37
+ expense2 = create(:expense_gun_expense, user: user2)
38
+
39
+ get :index
40
+
41
+ expect(assigns :users).to eq [user2]
42
+ end
33
43
  end # describe "filters"
34
44
  end # describe "#index"
35
45
  end
@@ -130,18 +130,6 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
130
130
  expect(assigns(:tasks).to_a).to eq [@task2, @task3, @task1]
131
131
  end
132
132
  end
133
-
134
- context "export" do
135
- render_views
136
-
137
- it "should not paginate the CSV" do
138
- 50.times { task.dup.save }
139
- get :index, params: {format: :csv}
140
- exported_lines_count_plus_header = CSV.parse(response.body).count
141
- task_count = Dorsale::Flyboy::Task.count
142
- expect(exported_lines_count_plus_header).to eq task_count+1
143
- end
144
- end
145
133
  end
146
134
 
147
135
  describe "GET show" do
@@ -182,7 +170,7 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
182
170
 
183
171
  it "redirects to the created task" do
184
172
  post :create, params: {:task => valid_attributes}
185
- expect(response).to redirect_to Dorsale::Flyboy::Task.order("id ASC").last
173
+ expect(response).to redirect_to Dorsale::Flyboy::Task.last_created
186
174
  end
187
175
 
188
176
  it "should send a mail to the owner" do
@@ -1,7 +1,7 @@
1
1
  FactoryGirl.define do
2
2
  factory :dorsale_comment, class: ::Dorsale::Comment do
3
- commentable { DummyModel.create!(name: "abc") }
4
- author { create(:user) }
5
- text { Faker::Lorem.paragraph }
3
+ commentable { create(:customer_vault_corporation) }
4
+ author { create(:user) }
5
+ text { Faker::Lorem.paragraph }
6
6
  end
7
7
  end
@@ -103,6 +103,21 @@ describe Dorsale::TextHelper, type: :helper do
103
103
  it "should work with class" do
104
104
  expect(info Dorsale::CustomerVault::Person, :count, 123).to eq %(<div class="info"><strong class="info-label">Nombre de contacts</strong><span class="info-separator"> : </span><span class="info-value person-count">123</span></div>)
105
105
  end
106
+
107
+ it "should accept default value" do
108
+ quotation_line.unit = nil
109
+ expect(info quotation_line, :unit, default: "hello").to eq %(<div class="info"><strong class="info-label">Unité</strong><span class="info-separator"> : </span><span class="info-value quotation_line-unit">hello</span></div>)
110
+ end
111
+
112
+ it "should accept :hide as default value" do
113
+ quotation_line.unit = nil
114
+ expect(info quotation_line, :unit, default: :hide).to eq nil
115
+ end
116
+
117
+ it "should hide on blank strings" do
118
+ quotation_line.unit = " \n"
119
+ expect(info quotation_line, :unit, default: :hide).to eq nil
120
+ end
106
121
  end
107
122
 
108
123
  end
File without changes
@@ -0,0 +1,29 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Dorsale::SortableUUIDGenerator do
4
+ it "should generate a valid uuid" do
5
+ uuid = described_class.generate
6
+ expect(uuid).to match described_class::REGEX_WITH_DASHES
7
+ end
8
+
9
+ it "should still work in 100 years" do
10
+ Timecop.travel "2116-11-17"
11
+ uuid = described_class.generate
12
+ expect(uuid).to match described_class::REGEX_WITH_DASHES
13
+ end
14
+
15
+ it "should be incremental" do
16
+ uuids = []
17
+ 1_000.times { uuids << described_class.generate }
18
+ Timecop.travel 1.day.from_now
19
+ 1_000.times { uuids << described_class.generate }
20
+ Timecop.travel 1.month.from_now
21
+ 1_000.times { uuids << described_class.generate }
22
+ Timecop.travel 1.year.from_now
23
+ 1_000.times { uuids << described_class.generate }
24
+ Timecop.travel 10.years.from_now
25
+ 1_000.times { uuids << described_class.generate }
26
+
27
+ expect(uuids).to eq uuids.dup.sort
28
+ end
29
+ end
data/spec/rails_helper.rb CHANGED
@@ -53,4 +53,6 @@ RSpec.configure do |config|
53
53
  config.infer_spec_type_from_file_location!
54
54
 
55
55
  config.include FactoryGirl::Syntax::Methods
56
+
57
+ config.after { Timecop.return }
56
58
  end
@@ -59,6 +59,21 @@ RSpec.describe ::Dorsale::CustomerVault::PeopleController, type: :routing do
59
59
  route_to("dorsale/customer_vault/people#show", id: "1")
60
60
  end
61
61
 
62
+ it "#tasks" do
63
+ expect(get "/customer_vault/people/1/tasks").to \
64
+ route_to("dorsale/customer_vault/people#tasks", id: "1")
65
+ end
66
+
67
+ it "#invoices" do
68
+ expect(get "/customer_vault/people/1/invoices").to \
69
+ route_to("dorsale/customer_vault/people#invoices", id: "1")
70
+ end
71
+
72
+ it "#links" do
73
+ expect(get "/customer_vault/people/1/links").to \
74
+ route_to("dorsale/customer_vault/links#index", person_id: "1")
75
+ end
76
+
62
77
  it "#edit" do
63
78
  expect(get "/customer_vault/people/1/edit").to \
64
79
  route_to("dorsale/customer_vault/people#edit", id: "1")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorsale
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.7
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - agilidée
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-16 00:00:00.000000000 Z
11
+ date: 2016-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -444,6 +444,34 @@ dependencies:
444
444
  - - ">="
445
445
  - !ruby/object:Gem::Version
446
446
  version: '0'
447
+ - !ruby/object:Gem::Dependency
448
+ name: nilify_blanks
449
+ requirement: !ruby/object:Gem::Requirement
450
+ requirements:
451
+ - - ">="
452
+ - !ruby/object:Gem::Version
453
+ version: '0'
454
+ type: :runtime
455
+ prerelease: false
456
+ version_requirements: !ruby/object:Gem::Requirement
457
+ requirements:
458
+ - - ">="
459
+ - !ruby/object:Gem::Version
460
+ version: '0'
461
+ - !ruby/object:Gem::Dependency
462
+ name: chartkick
463
+ requirement: !ruby/object:Gem::Requirement
464
+ requirements:
465
+ - - ">="
466
+ - !ruby/object:Gem::Version
467
+ version: '0'
468
+ type: :runtime
469
+ prerelease: false
470
+ version_requirements: !ruby/object:Gem::Requirement
471
+ requirements:
472
+ - - ">="
473
+ - !ruby/object:Gem::Version
474
+ version: '0'
447
475
  description: Run your own business.
448
476
  email:
449
477
  - contact@agilidee.com
@@ -502,6 +530,7 @@ files:
502
530
  - app/assets/stylesheets/dorsale/engines/flyboy.sass
503
531
  - app/assets/stylesheets/dorsale/engines/users.sass
504
532
  - app/assets/stylesheets/dorsale/opt/bootstrap_nav_left.sass
533
+ - app/assets/stylesheets/dorsale/print.sass
505
534
  - app/commands/dorsale/flyboy/task_commands.rb
506
535
  - app/controllers/concerns/dorsale/back_url_concern.rb
507
536
  - app/controllers/concerns/dorsale/flyboy/tasks_summary_concern.rb
@@ -562,10 +591,13 @@ files:
562
591
  - app/helpers/dorsale/routes_helper.rb
563
592
  - app/helpers/dorsale/text_helper.rb
564
593
  - app/helpers/dorsale/users_helper.rb
594
+ - app/libs/dorsale/sortable_uuid_generator.rb
565
595
  - app/mailers/dorsale/application_mailer.rb
566
596
  - app/mailers/dorsale/billing_machine/invoice_mailer.rb
567
597
  - app/mailers/dorsale/flyboy/task_mailer.rb
568
598
  - app/mailers/dorsale/user_mailer.rb
599
+ - app/models/concerns/dorsale/active_record_uuid_concern.rb
600
+ - app/models/concerns/dorsale/default_values_concern.rb
569
601
  - app/models/dorsale/address.rb
570
602
  - app/models/dorsale/alexandrie.rb
571
603
  - app/models/dorsale/alexandrie/attachment.rb
@@ -604,7 +636,6 @@ files:
604
636
  - app/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf.rb
605
637
  - app/pdfs/dorsale/billing_machine/quotation_pdf_common_methods.rb
606
638
  - app/pdfs/dorsale/billing_machine/quotation_single_vat_pdf.rb
607
- - app/pdfs/dorsale/flyboy/roadmap.rb
608
639
  - app/policies/dorsale/alexandrie/attachment_policy_helper.rb
609
640
  - app/policies/dorsale/alexandrie/attachment_type_policy_helper.rb
610
641
  - app/policies/dorsale/application_policy.rb
@@ -663,8 +694,8 @@ files:
663
694
  - app/views/dorsale/billing_machine/invoices/_show_actions.html.slim
664
695
  - app/views/dorsale/billing_machine/invoices/edit.html.slim
665
696
  - app/views/dorsale/billing_machine/invoices/email.html.slim
666
- - app/views/dorsale/billing_machine/invoices/index.csv.ruby
667
697
  - app/views/dorsale/billing_machine/invoices/index.html.slim
698
+ - app/views/dorsale/billing_machine/invoices/index.xlsx.ruby
668
699
  - app/views/dorsale/billing_machine/invoices/new.html.slim
669
700
  - app/views/dorsale/billing_machine/invoices/show.html.slim
670
701
  - app/views/dorsale/billing_machine/invoices/show.pdf.ruby
@@ -686,33 +717,33 @@ files:
686
717
  - app/views/dorsale/billing_machine/quotations/show.html.slim
687
718
  - app/views/dorsale/billing_machine/quotations/show.pdf.ruby
688
719
  - app/views/dorsale/comments/_comment.html.slim
720
+ - app/views/dorsale/comments/_comments.html.slim
689
721
  - app/views/dorsale/comments/_form.html.slim
690
722
  - app/views/dorsale/comments/_list.html.slim
691
- - app/views/dorsale/comments/_loader.html.slim
692
723
  - app/views/dorsale/comments/edit.html.slim
693
- - app/views/dorsale/comments/index.html.slim
694
724
  - app/views/dorsale/customer_vault/corporations/_context.html.slim
695
725
  - app/views/dorsale/customer_vault/individuals/_context.html.slim
696
726
  - app/views/dorsale/customer_vault/links/edit.html.slim
727
+ - app/views/dorsale/customer_vault/links/index.html.slim
697
728
  - app/views/dorsale/customer_vault/links/new.html.slim
698
729
  - app/views/dorsale/customer_vault/people/_actions.html.slim
699
- - app/views/dorsale/customer_vault/people/_activity_tab.html.slim
700
- - app/views/dorsale/customer_vault/people/_comment.html.slim
701
730
  - app/views/dorsale/customer_vault/people/_context.html.slim
702
731
  - app/views/dorsale/customer_vault/people/_data_context.html.slim
703
732
  - app/views/dorsale/customer_vault/people/_filters.html.slim
704
733
  - app/views/dorsale/customer_vault/people/_form.html.slim
705
734
  - app/views/dorsale/customer_vault/people/_index_tabs.html.slim
706
- - app/views/dorsale/customer_vault/people/_links_tab.html.slim
707
735
  - app/views/dorsale/customer_vault/people/_list.html.slim
708
736
  - app/views/dorsale/customer_vault/people/_list_item.html.slim
709
- - app/views/dorsale/customer_vault/people/_tasks_tab.html.slim
737
+ - app/views/dorsale/customer_vault/people/_show_layout.html.slim
738
+ - app/views/dorsale/customer_vault/people/_tabs.html.slim
710
739
  - app/views/dorsale/customer_vault/people/activity.slim
711
740
  - app/views/dorsale/customer_vault/people/edit.html.slim
712
741
  - app/views/dorsale/customer_vault/people/index.html.slim
713
- - app/views/dorsale/customer_vault/people/index.xls.slim
742
+ - app/views/dorsale/customer_vault/people/index.xlsx.ruby
743
+ - app/views/dorsale/customer_vault/people/invoices.html.slim
714
744
  - app/views/dorsale/customer_vault/people/new.html.slim
715
745
  - app/views/dorsale/customer_vault/people/show.html.slim
746
+ - app/views/dorsale/customer_vault/people/tasks.html.slim
716
747
  - app/views/dorsale/expense_gun/categories/_form.html.slim
717
748
  - app/views/dorsale/expense_gun/categories/_list.html.slim
718
749
  - app/views/dorsale/expense_gun/categories/edit.html.slim
@@ -747,10 +778,8 @@ files:
747
778
  - app/views/dorsale/flyboy/tasks/_taskable_context.html.slim
748
779
  - app/views/dorsale/flyboy/tasks/_tasks_for_taskable.html.slim
749
780
  - app/views/dorsale/flyboy/tasks/edit.html.slim
750
- - app/views/dorsale/flyboy/tasks/index.csv.ruby
751
781
  - app/views/dorsale/flyboy/tasks/index.html.slim
752
- - app/views/dorsale/flyboy/tasks/index.pdf.ruby
753
- - app/views/dorsale/flyboy/tasks/index.xls.erb
782
+ - app/views/dorsale/flyboy/tasks/index.xlsx.ruby
754
783
  - app/views/dorsale/flyboy/tasks/new.html.slim
755
784
  - app/views/dorsale/flyboy/tasks/show.html.slim
756
785
  - app/views/dorsale/flyboy/tasks/summary.html.slim
@@ -809,6 +838,7 @@ files:
809
838
  - db/migrate/20160317124838_add_user_on_expense_gun_expense.rb
810
839
  - db/migrate/20160910164840_create_dorsale_customer_vault_people.rb
811
840
  - db/migrate/20160930073538_create_dorsale_alexandrie_attachment_types.rb
841
+ - db/migrate/20161118071317_dorsale_add_missing_indexes.rb
812
842
  - features/access.feature
813
843
  - features/billing_machine_id_cards.feature
814
844
  - features/billing_machine_invoices.feature
@@ -818,6 +848,7 @@ files:
818
848
  - features/customer_vault_corporations.feature
819
849
  - features/customer_vault_filters.feature
820
850
  - features/customer_vault_individuals.feature
851
+ - features/customer_vault_invoices.feature
821
852
  - features/customer_vault_links.feature
822
853
  - features/customer_vault_people.feature
823
854
  - features/customer_vault_search.feature
@@ -839,6 +870,7 @@ files:
839
870
  - features/step_definitions/customer_vault_corporations_steps.rb
840
871
  - features/step_definitions/customer_vault_filters_steps.rb
841
872
  - features/step_definitions/customer_vault_individuals_steps.rb
873
+ - features/step_definitions/customer_vault_invoices_steps.rb
842
874
  - features/step_definitions/customer_vault_links_steps.rb
843
875
  - features/step_definitions/customer_vault_people_steps.rb
844
876
  - features/step_definitions/customer_vault_search_steps.rb
@@ -914,8 +946,9 @@ files:
914
946
  - spec/helpers/dorsale/form_helper_spec.rb
915
947
  - spec/helpers/dorsale/link_helper_spec.rb
916
948
  - spec/helpers/dorsale/text_helper_spec.rb
917
- - spec/lib/active_record_comma_type_cast_spec.rb
918
- - spec/lib/polymorphic_id_spec.rb
949
+ - spec/libs/active_record_comma_type_cast_spec.rb
950
+ - spec/libs/dorsale/polymorphic_id_spec.rb
951
+ - spec/libs/dorsale/sortable_uuid_generator_spec.rb
919
952
  - spec/mailers/user_mailer.rb
920
953
  - spec/models/dorsale/address_spec.rb
921
954
  - spec/models/dorsale/alexandrie/attachment_spec.rb
@@ -1024,8 +1057,9 @@ test_files:
1024
1057
  - spec/helpers/dorsale/form_helper_spec.rb
1025
1058
  - spec/helpers/dorsale/link_helper_spec.rb
1026
1059
  - spec/helpers/dorsale/text_helper_spec.rb
1027
- - spec/lib/active_record_comma_type_cast_spec.rb
1028
- - spec/lib/polymorphic_id_spec.rb
1060
+ - spec/libs/active_record_comma_type_cast_spec.rb
1061
+ - spec/libs/dorsale/polymorphic_id_spec.rb
1062
+ - spec/libs/dorsale/sortable_uuid_generator_spec.rb
1029
1063
  - spec/mailers/user_mailer.rb
1030
1064
  - spec/models/dorsale/address_spec.rb
1031
1065
  - spec/models/dorsale/alexandrie/attachment_spec.rb
@@ -1083,6 +1117,7 @@ test_files:
1083
1117
  - features/customer_vault_corporations.feature
1084
1118
  - features/customer_vault_filters.feature
1085
1119
  - features/customer_vault_individuals.feature
1120
+ - features/customer_vault_invoices.feature
1086
1121
  - features/customer_vault_links.feature
1087
1122
  - features/customer_vault_people.feature
1088
1123
  - features/customer_vault_search.feature
@@ -1104,6 +1139,7 @@ test_files:
1104
1139
  - features/step_definitions/customer_vault_corporations_steps.rb
1105
1140
  - features/step_definitions/customer_vault_filters_steps.rb
1106
1141
  - features/step_definitions/customer_vault_individuals_steps.rb
1142
+ - features/step_definitions/customer_vault_invoices_steps.rb
1107
1143
  - features/step_definitions/customer_vault_links_steps.rb
1108
1144
  - features/step_definitions/customer_vault_people_steps.rb
1109
1145
  - features/step_definitions/customer_vault_search_steps.rb