dorsale 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
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,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "3.3.0"
2
+ VERSION = "3.4.0"
3
3
  end
@@ -20,7 +20,10 @@ describe Dorsale::BillingMachine::InvoicesController, type: :controller do
20
20
  render_views
21
21
 
22
22
  it "should be ok" do
23
- 3.times { create(:billing_machine_invoice) }
23
+ 3.times {
24
+ invoice = create(:billing_machine_invoice)
25
+ Dorsale::BillingMachine::PdfFileGenerator.(invoice)
26
+ }
24
27
  get :index, params: {format: :pdf}
25
28
  expect(response).to be_ok
26
29
  end
@@ -11,14 +11,8 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
11
11
  create(:flyboy_task, done: false)
12
12
  }
13
13
 
14
- let!(:task2) {
15
- create(:flyboy_task, taskable: task.taskable, done: true)
16
- }
17
-
18
14
  let(:valid_attributes) {{
19
15
  :name => "New Task" ,
20
- :taskable_id => task.taskable.id,
21
- :taskable_type => task.taskable.class,
22
16
  :reminder => (Time.zone.now.to_date - 3.days),
23
17
  :term => Time.zone.now.to_date,
24
18
  }}
@@ -79,15 +73,14 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
79
73
 
80
74
  context "when sorting" do
81
75
  before do
82
- Dorsale::Flyboy::Folder.destroy_all
83
76
  Dorsale::Flyboy::Task.destroy_all
84
- @folder1 = create(:flyboy_folder, name: "Abc")
85
- @folder2 = create(:flyboy_folder, name: "dEF")
86
- @folder3 = create(:flyboy_folder, name: "xyz")
77
+ @corporation1 = create(:customer_vault_corporation, name: "Abc")
78
+ @corporation2 = create(:customer_vault_corporation, name: "dEF")
79
+ @corporation3 = create(:customer_vault_corporation, name: "xyz")
87
80
 
88
- @task1 = create(:flyboy_task, taskable: @folder1, name: "Abc", progress: 100, term: "21/12/2012", reminder: "21/12/2012")
89
- @task2 = create(:flyboy_task, taskable: @folder2, name: "dEF", progress: 0, term: "23/12/2012", reminder: "23/12/2012")
90
- @task3 = create(:flyboy_task, taskable: @folder3, name: "xyz", progress: 35, term: "22/12/2012", reminder: "22/12/2012")
81
+ @task1 = create(:flyboy_task, taskable: @corporation1, name: "Abc", progress: 100, term: "21/12/2012", reminder: "21/12/2012")
82
+ @task2 = create(:flyboy_task, taskable: @corporation2, name: "dEF", progress: 0, term: "23/12/2012", reminder: "23/12/2012")
83
+ @task3 = create(:flyboy_task, taskable: @corporation3, name: "xyz", progress: 35, term: "22/12/2012", reminder: "22/12/2012")
91
84
  end
92
85
 
93
86
  it "sorting by taskable asc" do
@@ -139,13 +132,6 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
139
132
  end
140
133
  end
141
134
 
142
- describe "GET new" do
143
- it "assigns a new task as @task" do
144
- get :new, params: {:folder_id => task.taskable.id}
145
- expect(assigns(:task)).to be_a_new(Dorsale::Flyboy::Task)
146
- end
147
- end
148
-
149
135
  describe "GET edit" do
150
136
  it "assigns the requested task as @task" do
151
137
  get :edit, params: {:id => task.to_param}
@@ -197,14 +183,6 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
197
183
  expect(ActionMailer::Base.deliveries.count).to eq 0
198
184
  end
199
185
  end
200
-
201
- describe "with invalid params" do
202
- it "assigns a newly created but unsaved task as @task" do
203
- post :create, params: {task: {name: nil, taskable_id: task.taskable.id, taskable_type: task.taskable.class}}
204
- expect(assigns(:task)).to be_a_new(Dorsale::Flyboy::Task)
205
- end
206
- end
207
-
208
186
  end
209
187
 
210
188
  describe "PUT update" do
@@ -261,7 +239,6 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
261
239
 
262
240
  describe "summary" do
263
241
  let(:summary_user) { create :user }
264
- let(:folder) { create(:flyboy_folder) }
265
242
 
266
243
  before(:each) do
267
244
  Dorsale::Flyboy::Task.destroy_all
@@ -269,7 +246,7 @@ describe Dorsale::Flyboy::TasksController, type: :controller do
269
246
 
270
247
  Timecop.travel "2016-03-09 15:00:00" do
271
248
  @delayed_task = create(:flyboy_task, term: Date.yesterday) # tuesday
272
- @today_task = create(:flyboy_task, term: Time.zone.now.to_date) # thursday - today
249
+ @today_task = create(:flyboy_task, term: Time.zone.now.to_date) # thursday - today
273
250
  @tomorrow_task = create(:flyboy_task, term: Date.tomorrow) # wednesday
274
251
  @this_week_task = create(:flyboy_task, term: Date.parse("2016-03-12")) # sunday
275
252
  @next_week_task = create(:flyboy_task, term: Date.parse("2016-03-14")) # monday next week
@@ -1,7 +1,5 @@
1
1
  FactoryGirl.define do
2
2
  factory :flyboy_task, class: ::Dorsale::Flyboy::Task do
3
- taskable { create(:flyboy_folder) }
4
-
5
3
  name { "I-am-a-task#{Kernel.rand(1_000..9_999)}" }
6
4
  description { "I-am-the-task-description_#{Kernel.rand(1_000..9_999)}" }
7
5
  progress { Kernel.rand(0..99) }
@@ -1,69 +1,6 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe Dorsale::Flyboy::ApplicationHelper, type: :helper do
4
-
5
- describe '#folder_color' do
6
- let!(:folder) {
7
- create(:flyboy_folder)
8
- }
9
-
10
- # ensure that tasks are filtered by group
11
- let!(:task_other_group_onalert) {
12
- create(:flyboy_task, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date - 1.day, done: false)
13
- }
14
-
15
- let!(:task_other_group_onwarning) {
16
- create(:flyboy_task, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date + 1.day, done: false)
17
- }
18
-
19
- #ensure tasks are filtered by folder
20
- let!(:other_folder) {
21
- create(:flyboy_folder)
22
- }
23
- let!(:task_onalert_for_other_folder) {
24
- create(:flyboy_task, taskable: other_folder, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date - 1.day, done: false)
25
- }
26
- let!(:task_onwarning_for_other_folder) {
27
- create(:flyboy_task, taskable: other_folder, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date + 1.day, done: false)
28
- }
29
-
30
- let!(:task_ontime) {
31
- create(:flyboy_task, taskable: folder, reminder: Time.zone.now.to_date + 1.day, term: Time.zone.now.to_date + 3.days, done: false)
32
- }
33
- let!(:task_finished) {
34
- create(:flyboy_task, taskable: folder, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date - 1.day, done: true)
35
- }
36
-
37
- context 'when all tasks are ontime or finished' do
38
- it 'should return ontime' do
39
- expect(folder_color(folder)).to eq('ontime')
40
- end
41
-
42
- end
43
-
44
- context 'when the folder is closed' do
45
- it 'should return finished' do
46
- folder_finished = create(:flyboy_folder, :status => "closed")
47
- expect(folder_color(folder_finished)).to eq('finished')
48
- end
49
- end
50
-
51
- context 'when at least one task is on warning' do
52
- let!(:task_onwarning) {create(:flyboy_task, taskable: folder, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date + 1.day, done: false)}
53
- it 'should return onwarning' do
54
- expect(folder_color(folder)).to eq('onwarning')
55
- end
56
- end
57
-
58
- context 'when at least one task is on alert' do
59
- let!(:task_onwarning) {create(:flyboy_task, taskable: folder, reminder: Time.zone.now.to_date - 3.days, term: Time.zone.now.to_date - 1.day, done: false)}
60
-
61
- it 'should return onalert' do
62
- expect(folder_color(folder)).to eq('onalert')
63
- end
64
- end
65
- end
66
-
67
4
  describe '#task_color' do
68
5
  # L’affichage de la couleur de la tâche dépend de son achèvement:
69
6
  # Si date jour < date relance alors noir
@@ -87,5 +24,4 @@ describe Dorsale::Flyboy::ApplicationHelper, type: :helper do
87
24
  expect(task_color(task)).to eq('finished')
88
25
  end
89
26
  end
90
-
91
27
  end
@@ -0,0 +1,74 @@
1
+ require 'rails_helper'
2
+
3
+ describe Dorsale::SortingHelper, type: :helper do
4
+ describe "#sortable_column" do
5
+ let(:params) {{
6
+ :controller => "home",
7
+ :action => "home",
8
+ }}
9
+
10
+ it "current sort is nil" do
11
+ link = sortable_column("text", :col)
12
+ expect(link).to eq %(<a class="sort" href="/?sort=col">text</a>)
13
+ end
14
+
15
+ it "current sort is col" do
16
+ params.merge!(sort: "col")
17
+ link = sortable_column("text", :col)
18
+ expect(link).to eq %(<a class="sort asc" href="/?sort=-col">text ↓</a>)
19
+ end
20
+
21
+ it "current sort is -col" do
22
+ params.merge!(sort: "-col")
23
+ link = sortable_column("text", :col)
24
+ expect(link).to eq %(<a class="sort desc" href="/?sort=col">text ↑</a>)
25
+ end
26
+
27
+ it "current sort is other" do
28
+ params.merge!(sort: "other")
29
+ link = sortable_column("text", :col)
30
+ expect(link).to eq %(<a class="sort" href="/?sort=col">text</a>)
31
+ end
32
+
33
+ it "current sort is -other" do
34
+ params.merge!(sort: "-other")
35
+ link = sortable_column("text", :col)
36
+ expect(link).to eq %(<a class="sort" href="/?sort=col">text</a>)
37
+ end
38
+
39
+ it "should raise on invalid column type" do
40
+ # old handles_sortable_columns syntax
41
+ expect {
42
+ sortable_column("text", {column: "col"})
43
+ }.to raise_error ArgumentError
44
+ end
45
+ end # describe "#sortable_column"
46
+
47
+ describe "#sortable_column_order" do
48
+ attr_reader :params
49
+
50
+ it "should parse asc column" do
51
+ @params = {sort: "col"}
52
+ expect(sortable_column_order).to eq ["col", :asc]
53
+ end
54
+
55
+ it "should parse desc column" do
56
+ @params = {sort: "-col"}
57
+ expect(sortable_column_order).to eq ["col", :desc]
58
+ end
59
+
60
+ it "should parse nil" do
61
+ @params = {}
62
+ expect(sortable_column_order).to eq [nil, nil]
63
+ end
64
+
65
+ it "should accept block" do
66
+ @params = {sort: "-col"}
67
+
68
+ sortable_column_order do |column, order|
69
+ expect(column).to eq "col"
70
+ expect(order).to eq :desc
71
+ end
72
+ end
73
+ end # describe "#sortable_column_order"
74
+ end
@@ -1,6 +1,6 @@
1
1
  require "rails_helper"
2
2
 
3
- describe ActiveRecordCommaTypeCast, type: :model do
3
+ describe Dorsale::ActiveRecordCommaTypeCast, type: :model do
4
4
  let(:line) { create(:billing_machine_invoice_line) }
5
5
 
6
6
  it "should accept , as decimal separator" do
@@ -8,17 +8,18 @@ RSpec.describe Dorsale::PolymorphicId do
8
8
  end
9
9
 
10
10
  it "should return guid" do
11
- folder = create(:flyboy_folder)
12
- task = build(:flyboy_task, taskable: nil)
11
+ corporation = create(:customer_vault_corporation)
12
+ task = build(:flyboy_task, taskable: nil)
13
13
 
14
- expect(folder.id).to be_present
15
14
  expect(task.taskable).to be_nil
16
15
  expect(task.taskable_id).to be_nil
17
16
  expect(task.taskable_type).to be_nil
18
- task.taskable_guid = folder.guid
19
- expect(task.taskable).to eq folder
20
- expect(task.taskable_id).to eq folder.id
21
- expect(task.taskable_type).to eq "Dorsale::Flyboy::Folder"
17
+
18
+ task.taskable_guid = corporation.guid
19
+
20
+ expect(task.taskable).to eq corporation
21
+ expect(task.taskable_id).to eq corporation.id
22
+ expect(task.taskable_type).to eq "Dorsale::CustomerVault::Person"
22
23
  end
23
24
 
24
25
  it "should return base_class in guid" do
@@ -14,7 +14,7 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
14
14
  end
15
15
 
16
16
  it "new expense should have new state" do
17
- expect(::Dorsale::ExpenseGun::Expense.new.current_state).to be :new
17
+ expect(::Dorsale::ExpenseGun::Expense.new.current_state).to be :draft
18
18
  end
19
19
 
20
20
  describe "new state" do
@@ -22,19 +22,19 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
22
22
  @expense = build(:expense_gun_expense)
23
23
  end
24
24
 
25
- it "new expense can be submited" do
26
- expect(@expense.go_to_submited).to be true
27
- expect(@expense.current_state).to be :submited
25
+ it "new expense can be submitted" do
26
+ expect(@expense.go_to_submitted).to be true
27
+ expect(@expense.current_state).to be :submitted
28
28
  end
29
29
 
30
30
  it "new expense can't be accepted" do
31
31
  expect(@expense.go_to_accepted).to be false
32
- expect(@expense.current_state).to be :new
32
+ expect(@expense.current_state).to be :draft
33
33
  end
34
34
 
35
35
  it "new expense can't be refused" do
36
36
  expect(@expense.go_to_refused).to be false
37
- expect(@expense.current_state).to be :new
37
+ expect(@expense.current_state).to be :draft
38
38
  end
39
39
 
40
40
  it "new expense can be canceled" do
@@ -43,10 +43,10 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
43
43
  end
44
44
  end
45
45
 
46
- describe "submited state" do
46
+ describe "submitted state" do
47
47
  before :each do
48
48
  @expense = build(:expense_gun_expense)
49
- @expense.go_to_submited
49
+ @expense.go_to_submitted
50
50
  end
51
51
 
52
52
  it "submitted expense can be accepted" do
@@ -68,12 +68,12 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
68
68
  describe "acceped state" do
69
69
  before :each do
70
70
  @expense = build(:expense_gun_expense)
71
- @expense.go_to_submited
71
+ @expense.go_to_submitted
72
72
  @expense.go_to_accepted
73
73
  end
74
74
 
75
- it "acceped expense can't be submited" do
76
- expect(@expense.go_to_submited).to be false
75
+ it "acceped expense can't be submitted" do
76
+ expect(@expense.go_to_submitted).to be false
77
77
  expect(@expense.current_state).to be :accepted
78
78
  end
79
79
 
@@ -91,12 +91,12 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
91
91
  describe "refused state" do
92
92
  before :each do
93
93
  @expense = build(:expense_gun_expense)
94
- @expense.go_to_submited
94
+ @expense.go_to_submitted
95
95
  @expense.go_to_refused
96
96
  end
97
97
 
98
- it "refused expense can't be submited" do
99
- expect(@expense.go_to_submited).to be false
98
+ it "refused expense can't be submitted" do
99
+ expect(@expense.go_to_submitted).to be false
100
100
  expect(@expense.current_state).to be :refused
101
101
  end
102
102
 
@@ -117,8 +117,8 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
117
117
  @expense.go_to_canceled
118
118
  end
119
119
 
120
- it "canceled expense can't be submited" do
121
- expect(@expense.go_to_submited).to be false
120
+ it "canceled expense can't be submitted" do
121
+ expect(@expense.go_to_submitted).to be false
122
122
  expect(@expense.current_state).to be :canceled
123
123
  end
124
124
 
@@ -156,9 +156,9 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
156
156
  expect(expense.total_vat_deductible).to eq 5.0
157
157
  end
158
158
 
159
- it "#may_edit? should return false unless expense is not submited" do
160
- expect(::Dorsale::ExpenseGun::Expense.new(state: :new).may_edit?).to be true
161
- expect(::Dorsale::ExpenseGun::Expense.new(state: :submited).may_edit?).to be false
159
+ it "#may_edit? should return false unless expense is not submitted" do
160
+ expect(::Dorsale::ExpenseGun::Expense.new(state: :draft).may_edit?).to be true
161
+ expect(::Dorsale::ExpenseGun::Expense.new(state: :submitted).may_edit?).to be false
162
162
  expect(::Dorsale::ExpenseGun::Expense.new(state: :acceped).may_edit?).to be false
163
163
  expect(::Dorsale::ExpenseGun::Expense.new(state: :refused).may_edit?).to be false
164
164
  expect(::Dorsale::ExpenseGun::Expense.new(state: :canceled).may_edit?).to be false
@@ -5,11 +5,12 @@ describe Dorsale::Flyboy::Task do
5
5
  it { is_expected.to belong_to :owner }
6
6
  it { is_expected.to have_many(:comments).dependent(:destroy) }
7
7
 
8
- it { is_expected.to validate_presence_of :taskable}
9
8
  it { is_expected.to validate_presence_of :name}
10
9
  it { is_expected.to validate_presence_of :term}
11
10
  it { is_expected.to validate_presence_of :reminder}
12
11
 
12
+ it { is_expected.to_not validate_presence_of :taskable}
13
+
13
14
  describe "default values" do
14
15
  before do
15
16
  @task = Dorsale::Flyboy::Task.new
@@ -16,12 +16,14 @@ describe ::Dorsale::BillingMachine::InvoiceMultipleVatPdf, pdfs: true do
16
16
  i
17
17
  }
18
18
 
19
+ let(:generate!) {
20
+ Dorsale::BillingMachine::PdfFileGenerator.(invoice)
21
+ invoice.reload
22
+ }
23
+
19
24
  let(:content) {
20
- tempfile = Tempfile.new("pdf")
21
- tempfile.binmode
22
- tempfile.write(invoice.to_pdf)
23
- tempfile.flush
24
- Yomu.new(tempfile.path).text
25
+ generate!
26
+ Yomu.new(invoice.pdf_file.path).text
25
27
  }
26
28
 
27
29
  it "should not display global vat rate" do
@@ -30,13 +32,16 @@ describe ::Dorsale::BillingMachine::InvoiceMultipleVatPdf, pdfs: true do
30
32
  expect(content).to include "TVA %"
31
33
  end
32
34
 
33
- it "should work with empty invoice" do
34
- id_card = Dorsale::BillingMachine::IdCard.new
35
- invoice = ::Dorsale::BillingMachine::Invoice.new(id_card: id_card)
36
-
37
- expect {
38
- invoice.to_pdf
39
- }.to_not raise_error
40
- end
35
+ describe "empty invoice" do
36
+ let(:invoice) {
37
+ id_card = Dorsale::BillingMachine::IdCard.new
38
+ id_card.save(validate: false)
39
+ invoice = ::Dorsale::BillingMachine::Invoice.create!(id_card: id_card)
40
+ }
41
+
42
+ it "should work" do
43
+ expect { generate! }.to_not raise_error
44
+ end
45
+ end # describe "empty invoice"
41
46
 
42
47
  end