dorsale 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/app/assets/stylesheets/dorsale/engines/flyboy.sass +0 -7
- data/app/controllers/dorsale/alexandrie/attachments_controller.rb +7 -0
- data/app/controllers/dorsale/application_controller.rb +1 -0
- data/app/controllers/dorsale/billing_machine/invoices_controller.rb +2 -0
- data/app/controllers/dorsale/billing_machine/quotations_controller.rb +2 -0
- data/app/controllers/dorsale/customer_vault/application_controller.rb +0 -4
- data/app/controllers/dorsale/customer_vault/people_controller.rb +0 -2
- data/app/controllers/dorsale/expense_gun/expenses_controller.rb +2 -2
- data/app/controllers/dorsale/flyboy/application_controller.rb +0 -3
- data/app/controllers/dorsale/flyboy/tasks_controller.rb +2 -8
- data/app/helpers/dorsale/all_helpers.rb +1 -0
- data/app/helpers/dorsale/flyboy/application_helper.rb +3 -12
- data/app/helpers/dorsale/link_helper.rb +10 -0
- data/app/helpers/dorsale/sorting_helper.rb +48 -0
- data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +1 -1
- data/app/models/concerns/dorsale/model_i18n.rb +25 -0
- data/app/models/concerns/dorsale/model_to_s.rb +9 -0
- data/{lib → app/models/concerns}/dorsale/polymorphic_id.rb +1 -3
- data/app/models/concerns/dorsale/search.rb +30 -0
- data/app/models/dorsale/alexandrie/attachment.rb +7 -6
- data/app/models/dorsale/application_record.rb +6 -0
- data/app/models/dorsale/billing_machine/invoice.rb +2 -6
- data/app/models/dorsale/billing_machine/quotation.rb +4 -4
- data/app/models/dorsale/customer_vault/person.rb +0 -2
- data/app/models/dorsale/expense_gun/expense.rb +8 -8
- data/app/models/dorsale/flyboy/task.rb +5 -16
- data/app/pdfs/concerns/dorsale/alexandrie/prawn/render_with_attachments.rb +13 -0
- data/app/pdfs/dorsale/billing_machine/invoice_single_vat_pdf.rb +6 -1
- data/app/pdfs/dorsale/billing_machine/quotation_pdf_common_methods.rb +0 -18
- data/app/policies/dorsale/expense_gun/expense_policy_helper.rb +1 -1
- data/app/policies/dorsale/flyboy/task_policy_helper.rb +0 -10
- data/app/policies/dorsale/policy_checker.rb +0 -1
- data/app/services/dorsale/billing_machine/pdf_file_generator.rb +37 -0
- data/app/services/dorsale/expense_gun/expense/copy.rb +1 -1
- data/app/uploaders/dorsale/pdf_uploader.rb +5 -0
- data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -1
- data/app/views/dorsale/billing_machine/invoices/_list.html.slim +1 -2
- data/app/views/dorsale/billing_machine/invoices/index.pdf.ruby +2 -2
- data/app/views/dorsale/billing_machine/invoices/show.pdf.ruby +1 -1
- data/app/views/dorsale/billing_machine/quotations/_list.html.slim +1 -2
- data/app/views/dorsale/billing_machine/quotations/show.pdf.ruby +1 -1
- data/app/views/dorsale/comments/_comment.html.slim +1 -1
- data/app/views/dorsale/customer_vault/links/new.html.slim +1 -1
- data/app/views/dorsale/customer_vault/people/_list_item.html.slim +1 -1
- data/app/views/dorsale/flyboy/tasks/_form.html.slim +3 -0
- data/app/views/dorsale/flyboy/tasks/_index_actions.html.slim +3 -0
- data/app/views/dorsale/flyboy/tasks/_list.html.slim +6 -12
- data/app/views/dorsale/flyboy/tasks/_summary_list.html.slim +2 -3
- data/app/views/dorsale/flyboy/tasks/_taskable_context.html.slim +1 -1
- data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +2 -4
- data/config/locales/billing_machine.en.yml +1 -0
- data/config/locales/billing_machine.fr.yml +1 -0
- data/config/locales/common.en.yml +3 -3
- data/config/locales/expense_gun.fr.yml +12 -12
- data/config/locales/flyboy.en.yml +1 -28
- data/config/locales/flyboy.fr.yml +1 -28
- data/config/routes.rb +0 -7
- data/db/migrate/20170127131537_delete_folders.rb +10 -0
- data/db/migrate/20170127151610_fix_expense_state.rb +6 -0
- data/db/migrate/20170127155636_billing_machine_add_pdf_file.rb +16 -0
- data/features/expense_gun_expenses.feature +3 -3
- data/features/flyboy_task_comments.feature +1 -1
- data/features/flyboy_tasks.feature +3 -4
- data/features/flyboy_tasks_summary.feature +0 -1
- data/features/step_definitions/billing_machine_invoices_steps.rb +1 -0
- data/features/step_definitions/expense_gun_expenses_steps.rb +2 -2
- data/features/step_definitions/flyboy_tasks_steps.rb +2 -3
- data/features/step_definitions/tasks_summary_steps.rb +3 -3
- data/lib/dorsale/active_record_comma_type_cast.rb +12 -0
- data/lib/dorsale/core_and_rails_ext.rb +3 -0
- data/lib/dorsale/engine.rb +6 -10
- data/lib/dorsale/form_back_url.rb +3 -1
- data/lib/dorsale/version.rb +1 -1
- data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +4 -1
- data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +7 -30
- data/spec/factories/flyboy_tasks.rb +0 -2
- data/spec/helpers/dorsale/flyboy/application_helper_spec.rb +0 -64
- data/spec/helpers/dorsale/sorting_helper_spec.rb +74 -0
- data/spec/libs/{active_record_comma_type_cast_spec.rb → dorsale/active_record_comma_type_cast_spec.rb} +1 -1
- data/spec/libs/dorsale/polymorphic_id_spec.rb +8 -7
- data/spec/models/{dorsale → concerns/dorsale}/model_i18n_spec.rb +0 -0
- data/spec/models/dorsale/expense_gun/expense_spec.rb +19 -19
- data/spec/models/dorsale/flyboy/task_spec.rb +2 -1
- data/spec/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf_spec.rb +18 -13
- data/spec/pdfs/dorsale/billing_machine/invoice_single_vat_pdf_spec.rb +18 -13
- data/spec/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf_spec.rb +18 -13
- data/spec/pdfs/dorsale/billing_machine/quotation_single_vat_pdf_spec.rb +25 -19
- data/spec/services/dorsale/expense_gun/expense/copy_spec.rb +1 -1
- metadata +21 -52
- data/app/controllers/dorsale/flyboy/folders_controller.rb +0 -140
- data/app/filters/dorsale/flyboy/small_data/filter_for_folders.rb +0 -5
- data/app/filters/dorsale/flyboy/small_data/filter_strategy_by_status.rb +0 -9
- data/app/models/dorsale/flyboy/folder.rb +0 -72
- data/app/policies/dorsale/flyboy/folder_policy_helper.rb +0 -26
- data/app/views/dorsale/flyboy/folders/_context.html.slim +0 -18
- data/app/views/dorsale/flyboy/folders/_context_actions.html.slim +0 -10
- data/app/views/dorsale/flyboy/folders/_form.html.slim +0 -17
- data/app/views/dorsale/flyboy/folders/_index_actions.html.slim +0 -2
- data/app/views/dorsale/flyboy/folders/_list.html.slim +0 -41
- data/app/views/dorsale/flyboy/folders/edit.html.slim +0 -8
- data/app/views/dorsale/flyboy/folders/index.html.slim +0 -22
- data/app/views/dorsale/flyboy/folders/new.html.slim +0 -2
- data/app/views/dorsale/flyboy/folders/show.html.slim +0 -14
- data/features/flyboy_folders.feature +0 -109
- data/features/step_definitions/flyboy_folders_steps.rb +0 -170
- data/lib/active_record_comma_type_cast.rb +0 -12
- data/lib/dorsale/alexandrie/prawn.rb +0 -17
- data/lib/dorsale/model_i18n.rb +0 -30
- data/lib/dorsale/model_to_s.rb +0 -13
- data/lib/dorsale/search.rb +0 -34
- data/spec/controllers/dorsale/flyboy/folders_controller_spec.rb +0 -113
- data/spec/factories/flyboy_folders.rb +0 -7
- data/spec/models/dorsale/flyboy/folder_spec.rb +0 -103
- data/spec/routing/dorsale/flyboy/folders_routing_spec.rb +0 -44
data/lib/dorsale/version.rb
CHANGED
@@ -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 {
|
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
|
-
@
|
85
|
-
@
|
86
|
-
@
|
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: @
|
89
|
-
@task2 = create(:flyboy_task, taskable: @
|
90
|
-
@task3 = create(:flyboy_task, taskable: @
|
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)
|
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
|
@@ -8,17 +8,18 @@ RSpec.describe Dorsale::PolymorphicId do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should return guid" do
|
11
|
-
|
12
|
-
task
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
expect(task.
|
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
|
File without changes
|
@@ -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 :
|
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
|
26
|
-
expect(@expense.
|
27
|
-
expect(@expense.current_state).to be :
|
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 :
|
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 :
|
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 "
|
46
|
+
describe "submitted state" do
|
47
47
|
before :each do
|
48
48
|
@expense = build(:expense_gun_expense)
|
49
|
-
@expense.
|
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.
|
71
|
+
@expense.go_to_submitted
|
72
72
|
@expense.go_to_accepted
|
73
73
|
end
|
74
74
|
|
75
|
-
it "acceped expense can't be
|
76
|
-
expect(@expense.
|
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.
|
94
|
+
@expense.go_to_submitted
|
95
95
|
@expense.go_to_refused
|
96
96
|
end
|
97
97
|
|
98
|
-
it "refused expense can't be
|
99
|
-
expect(@expense.
|
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
|
121
|
-
expect(@expense.
|
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
|
160
|
-
expect(::Dorsale::ExpenseGun::Expense.new(state: :
|
161
|
-
expect(::Dorsale::ExpenseGun::Expense.new(state: :
|
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
|
-
|
21
|
-
|
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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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
|