dorsale 3.8.1 → 3.9.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 +5 -0
- data/README.md +5 -1
- data/app/commands/dorsale/flyboy/task_commands.rb +1 -1
- data/app/controllers/concerns/dorsale/flyboy/tasks_summary_concern.rb +0 -1
- data/app/controllers/dorsale/alexandrie/attachments_controller.rb +1 -2
- data/app/controllers/dorsale/application_controller.rb +0 -1
- data/app/controllers/dorsale/billing_machine/application_controller.rb +0 -2
- data/app/controllers/dorsale/billing_machine/invoices_controller.rb +9 -22
- data/app/controllers/dorsale/billing_machine/payment_terms_controller.rb +0 -1
- data/app/controllers/dorsale/billing_machine/quotations_controller.rb +1 -4
- data/app/controllers/dorsale/comments_controller.rb +3 -2
- data/app/controllers/dorsale/customer_vault/activity_types_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/application_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/links_controller.rb +22 -12
- data/app/controllers/dorsale/customer_vault/origins_controller.rb +0 -1
- data/app/controllers/dorsale/customer_vault/people_controller.rb +2 -3
- data/app/controllers/dorsale/expense_gun/categories_controller.rb +0 -1
- data/app/controllers/dorsale/expense_gun/expenses_controller.rb +0 -1
- data/app/controllers/dorsale/flyboy/task_comments_controller.rb +0 -1
- data/app/controllers/dorsale/flyboy/tasks_controller.rb +28 -21
- data/app/controllers/dorsale/users_controller.rb +0 -1
- data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb +9 -5
- data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_state.rb +2 -2
- data/app/filters/dorsale/flyboy/small_data/filter_for_tasks.rb +1 -1
- data/app/helpers/dorsale/billing_machine/application_helper.rb +6 -6
- data/app/helpers/dorsale/context_helper.rb +1 -1
- data/app/helpers/dorsale/flyboy/application_helper.rb +4 -5
- data/app/mailers/dorsale/billing_machine/invoice_mailer.rb +0 -1
- data/app/mailers/dorsale/flyboy/task_mailer.rb +0 -1
- data/app/mailers/dorsale/user_mailer.rb +0 -1
- data/app/models/dorsale/address.rb +2 -2
- data/app/models/dorsale/alexandrie/attachment_type.rb +0 -1
- data/app/models/dorsale/billing_machine.rb +1 -2
- data/app/models/dorsale/billing_machine/invoice.rb +19 -30
- data/app/models/dorsale/billing_machine/invoice_line.rb +2 -2
- data/app/models/dorsale/billing_machine/quotation.rb +11 -17
- data/app/models/dorsale/billing_machine/quotation_line.rb +2 -3
- data/app/models/dorsale/comment.rb +1 -1
- data/app/models/dorsale/customer_vault/corporation.rb +11 -10
- data/app/models/dorsale/customer_vault/event.rb +2 -2
- data/app/models/dorsale/customer_vault/individual.rb +4 -2
- data/app/models/dorsale/customer_vault/person.rb +14 -4
- data/app/models/dorsale/customer_vault/person_data.rb +1 -2
- data/app/models/dorsale/expense_gun/expense.rb +2 -5
- data/app/models/dorsale/expense_gun/expense_line.rb +2 -2
- data/app/models/dorsale/flyboy/task.rb +17 -18
- data/app/models/dorsale/flyboy/task_comment.rb +1 -1
- data/app/models/dorsale/users/active.rb +1 -1
- data/app/models/dorsale/users/avatar.rb +2 -1
- data/app/models/dorsale/users/password_generation.rb +0 -1
- data/app/pdfs/concerns/dorsale/alexandrie/prawn/render_with_attachments.rb +1 -1
- data/app/pdfs/dorsale/application_pdf.rb +7 -0
- data/app/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf.rb +52 -47
- data/app/pdfs/dorsale/billing_machine/invoice_single_vat_pdf.rb +94 -205
- data/app/pdfs/dorsale/prawn_helpers.rb +107 -0
- data/app/policies/dorsale/application_policy.rb +2 -4
- data/app/policies/dorsale/expense_gun/expense_policy_helper.rb +0 -1
- data/app/policies/dorsale/flyboy/task_policy_helper.rb +3 -3
- data/app/policies/dorsale/policy_checker.rb +11 -18
- data/app/services/dorsale/billing_machine/invoice/copy.rb +2 -2
- data/app/services/dorsale/billing_machine/pdf_file_generator.rb +7 -2
- data/app/services/dorsale/billing_machine/quotation/copy.rb +1 -1
- data/app/services/dorsale/billing_machine/quotation/to_invoice.rb +10 -7
- data/app/services/dorsale/flyboy/task/snoozer.rb +1 -1
- data/app/views/dorsale/billing_machine/invoices/_details.html.slim +1 -2
- data/app/views/dorsale/billing_machine/invoices/_form.html.slim +4 -11
- data/app/views/dorsale/billing_machine/invoices/index.xlsx.ruby +1 -1
- data/app/views/dorsale/flyboy/tasks/index.xlsx.ruby +1 -1
- data/config/locales/alexandrie.en.yml +0 -4
- data/config/locales/alexandrie.fr.yml +0 -4
- data/config/locales/billing_machine.en.yml +0 -41
- data/config/locales/billing_machine.fr.yml +0 -41
- data/config/routes.rb +0 -1
- data/db/migrate/20161119064536_delete_id_cards.rb +9 -0
- data/features/billing_machine_invoices.feature +0 -1
- data/features/billing_machine_multiple_vat.feature +0 -1
- data/features/billing_machine_quotations.feature +0 -1
- data/features/step_definitions/billing_machine_invoices_steps.rb +73 -79
- data/features/step_definitions/billing_machine_multiple_vat.rb +5 -6
- data/features/step_definitions/billing_machine_payment_terms_steps.rb +2 -2
- data/features/step_definitions/billing_machine_quotations_steps.rb +45 -80
- data/features/step_definitions/common_steps.rb +0 -4
- data/features/step_definitions/customer_vault_activity_types_steps.rb +1 -1
- data/features/step_definitions/customer_vault_corporations_steps.rb +27 -23
- data/features/step_definitions/customer_vault_individuals_steps.rb +8 -9
- data/features/step_definitions/customer_vault_invoices_steps.rb +1 -1
- data/features/step_definitions/customer_vault_links_steps.rb +6 -6
- data/features/step_definitions/customer_vault_origins_steps.rb +1 -1
- data/features/step_definitions/customer_vault_people_steps.rb +2 -1
- data/features/step_definitions/expense_gun_categories_steps.rb +2 -2
- data/features/step_definitions/expense_gun_expenses_steps.rb +6 -6
- data/features/step_definitions/flyboy_tasks_steps.rb +4 -7
- data/features/step_definitions/tasks_summary_steps.rb +3 -3
- data/features/support/env.rb +3 -2
- data/lib/dorsale/engine.rb +8 -8
- data/lib/dorsale/file_loader.rb +1 -1
- data/lib/dorsale/simple_form.rb +3 -3
- data/lib/dorsale/simple_form_bootstrap.rb +46 -46
- data/lib/dorsale/version.rb +1 -1
- data/spec/controllers/dorsale/alexandrie/attachments_controller_spec.rb +3 -3
- data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +0 -1
- data/spec/controllers/dorsale/comments_controller_spec.rb +1 -1
- data/spec/controllers/dorsale/customer_vault/events_controller_spec.rb +9 -9
- data/spec/controllers/dorsale/customer_vault/people_controller_spec.rb +15 -19
- data/spec/controllers/dorsale/flyboy/task_comments_controller_spec.rb +1 -2
- data/spec/controllers/dorsale/flyboy/tasks_controller_spec.rb +43 -19
- data/spec/factories/alexandrie_attachment_types.rb +1 -1
- data/spec/factories/alexandrie_attachments.rb +1 -1
- data/spec/factories/billing_machine_invoice_lines.rb +1 -1
- data/spec/factories/billing_machine_invoices.rb +1 -2
- data/spec/factories/billing_machine_payment_terms.rb +1 -1
- data/spec/factories/billing_machine_quotation_lines.rb +1 -2
- data/spec/factories/billing_machine_quotations.rb +1 -2
- data/spec/factories/customer_vault_activity_types.rb +1 -1
- data/spec/factories/customer_vault_corporations.rb +1 -1
- data/spec/factories/customer_vault_event.rb +1 -1
- data/spec/factories/customer_vault_individuals.rb +2 -2
- data/spec/factories/customer_vault_links.rb +1 -1
- data/spec/factories/customer_vault_origins.rb +1 -1
- data/spec/factories/dorsale_addresses.rb +1 -1
- data/spec/factories/dorsale_comments.rb +1 -1
- data/spec/factories/expense_gun_categories.rb +2 -2
- data/spec/factories/expense_gun_expense_lines.rb +8 -8
- data/spec/factories/expense_gun_expenses.rb +2 -3
- data/spec/factories/flyboy_task_comments.rb +1 -1
- data/spec/factories/flyboy_tasks.rb +1 -1
- data/spec/mailers/user_mailer.rb +5 -6
- data/spec/models/dorsale/address_spec.rb +26 -26
- data/spec/models/dorsale/billing_machine/invoice_line_spec.rb +6 -6
- data/spec/models/dorsale/billing_machine/invoice_spec.rb +37 -23
- data/spec/models/dorsale/billing_machine/quotation_line_spec.rb +9 -10
- data/spec/models/dorsale/billing_machine/quotation_spec.rb +26 -28
- data/spec/models/dorsale/billing_machine_spec.rb +0 -1
- data/spec/models/dorsale/comment_spec.rb +0 -1
- data/spec/models/dorsale/customer_vault/corporation_spec.rb +20 -20
- data/spec/models/dorsale/customer_vault/event_spec.rb +1 -1
- data/spec/models/dorsale/customer_vault/individual_spec.rb +0 -2
- data/spec/models/dorsale/customer_vault/link_spec.rb +0 -1
- data/spec/models/dorsale/customer_vault/person_spec.rb +7 -6
- data/spec/models/dorsale/expense_gun/category_spec.rb +2 -2
- data/spec/models/dorsale/expense_gun/expense_line_spec.rb +14 -14
- data/spec/models/dorsale/expense_gun/expense_spec.rb +23 -13
- data/spec/models/dorsale/flyboy/task_comment_spec.rb +5 -6
- data/spec/models/dorsale/flyboy/task_spec.rb +66 -42
- data/spec/models/dorsale/users_spec.rb +3 -5
- data/spec/pdfs/dorsale/billing_machine/invoice_multiple_vat_pdf_spec.rb +6 -11
- data/spec/pdfs/dorsale/billing_machine/invoice_single_vat_pdf_spec.rb +7 -11
- data/spec/pdfs/dorsale/billing_machine/quotation_multiple_vat_pdf_spec.rb +6 -11
- data/spec/pdfs/dorsale/billing_machine/quotation_single_vat_pdf_spec.rb +7 -14
- data/spec/rails_helper.rb +1 -1
- data/spec/routing/dorsale/billing_machine/invoices_routing_spec.rb +0 -1
- data/spec/routing/dorsale/billing_machine/quotations_routing_spec.rb +0 -1
- data/spec/routing/dorsale/comments_routing_spec.rb +0 -2
- data/spec/routing/dorsale/customer_vault/people_routing_spec.rb +0 -1
- data/spec/routing/dorsale/expense_gun/expenses_routing_spec.rb +0 -1
- data/spec/routing/dorsale/flyboy/task_comments_routing_spec.rb +0 -1
- data/spec/routing/dorsale/users_routing_spec.rb +1 -1
- data/spec/services/dorsale/billing_machine/quotation/copy_spec.rb +2 -2
- data/spec/services/dorsale/expense_gun/expense/copy_spec.rb +13 -17
- data/spec/services/dorsale/flyboy/task/copy_spec.rb +1 -2
- data/spec/services/dorsale/flyboy/task/snoozer_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -0
- metadata +5 -43
- data/app/controllers/dorsale/billing_machine/id_cards_controller.rb +0 -106
- data/app/models/dorsale/billing_machine/id_card.rb +0 -14
- data/app/policies/dorsale/billing_machine/id_card_policy_helper.rb +0 -7
- data/app/views/dorsale/billing_machine/id_cards/_form.html.slim +0 -42
- data/app/views/dorsale/billing_machine/id_cards/_index_actions.html.slim +0 -2
- data/app/views/dorsale/billing_machine/id_cards/_list.html.slim +0 -27
- data/app/views/dorsale/billing_machine/id_cards/edit.html.slim +0 -1
- data/app/views/dorsale/billing_machine/id_cards/index.html.slim +0 -11
- data/app/views/dorsale/billing_machine/id_cards/new.html.slim +0 -1
- data/features/billing_machine_id_cards.feature +0 -19
- data/features/step_definitions/billing_machine_id_cards_steps.rb +0 -53
- data/features/support/ajax.rb +0 -20
- data/features/support/database_cleaner.rb +0 -12
- data/features/support/factory_girl.rb +0 -1
- data/features/support/fix_referrer.rb +0 -9
- data/features/support/message_delivery.rb +0 -1
- data/features/support/poltergeist.rb +0 -22
- data/features/support/rails.rb +0 -1
- data/features/support/rspec.rb +0 -6
- data/features/support/screenshots.rb +0 -5
- data/features/support/sign_in.rb +0 -17
- data/features/support/simplecov.rb +0 -1
- data/features/support/turbolinks.rb +0 -30
- data/spec/factories/billing_machine_id_cards.rb +0 -26
- data/spec/models/dorsale/billing_machine/id_card_spec.rb +0 -12
@@ -1,27 +1,27 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
3
|
RSpec.describe ::Dorsale::CustomerVault::Corporation, type: :model do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
it { is_expected.to have_one(:address).dependent(:destroy) }
|
5
|
+
it { is_expected.to have_many :comments }
|
6
|
+
it { is_expected.to have_many :taggings }
|
7
|
+
it { is_expected.to have_many :tags }
|
8
|
+
it { is_expected.to have_many :individuals }
|
9
|
+
it { is_expected.to have_many(:tasks).dependent(:destroy) }
|
10
|
+
it { is_expected.to have_many(:events).dependent(:destroy) }
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
it { is_expected.to respond_to :legal_form }
|
13
|
+
it { is_expected.to respond_to :capital }
|
14
|
+
it { is_expected.to respond_to :immatriculation_number }
|
15
|
+
it { is_expected.to respond_to :naf }
|
16
|
+
it { is_expected.to respond_to :revenue }
|
17
|
+
it { is_expected.to respond_to :context }
|
18
|
+
it { is_expected.to respond_to :number_of_employees }
|
19
|
+
it { is_expected.to respond_to :societe_com }
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
it { is_expected.to belong_to :activity_type }
|
22
|
+
it { is_expected.to belong_to :origin }
|
23
23
|
|
24
|
-
|
24
|
+
it { is_expected.to have_many(:comments).dependent(:destroy) }
|
25
25
|
|
26
|
-
|
26
|
+
it { is_expected.to validate_presence_of :corporation_name }
|
27
27
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require "rails_helper"
|
2
2
|
|
3
3
|
RSpec.describe ::Dorsale::CustomerVault::Person, type: :model do
|
4
|
-
describe
|
4
|
+
describe "#links" do
|
5
5
|
let!(:c) { create(:customer_vault_corporation) }
|
6
6
|
let!(:i) { create(:customer_vault_individual) }
|
7
|
-
let!(:link) { create(:customer_vault_link, alice: c, bob: i, title:
|
7
|
+
let!(:link) { create(:customer_vault_link, alice: c, bob: i, title: "a") }
|
8
8
|
|
9
9
|
it "should return links" do
|
10
10
|
expect(c.links).to eq [link]
|
@@ -18,9 +18,9 @@ RSpec.describe ::Dorsale::CustomerVault::Person, type: :model do
|
|
18
18
|
expect(link.other_person).to eq c
|
19
19
|
end
|
20
20
|
|
21
|
-
describe
|
21
|
+
describe "#destroy" do
|
22
22
|
it "should destroy links" do
|
23
|
-
c.destroy
|
23
|
+
c.destroy!
|
24
24
|
expect { link.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
25
25
|
end
|
26
26
|
end
|
@@ -32,14 +32,15 @@ RSpec.describe ::Dorsale::CustomerVault::Person, type: :model do
|
|
32
32
|
corporation_event = create(:customer_vault_event, person: corporation)
|
33
33
|
individual_event = create(:customer_vault_event, person: individual)
|
34
34
|
|
35
|
-
expect(corporation.self_and_related_events).to
|
35
|
+
expect(corporation.self_and_related_events).to \
|
36
|
+
contain_exactly(corporation_event, individual_event)
|
36
37
|
expect(individual.self_and_related_events).to contain_exactly(individual_event)
|
37
38
|
end
|
38
39
|
|
39
40
|
describe "address" do
|
40
41
|
let(:person_without_address) {
|
41
42
|
corporation = Dorsale::CustomerVault::Corporation.create!(name: "agilidée")
|
42
|
-
corporation.address.destroy
|
43
|
+
corporation.address.destroy!
|
43
44
|
corporation
|
44
45
|
}
|
45
46
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
|
-
RSpec.describe ::Dorsale::ExpenseGun::Category, type: :model
|
3
|
+
RSpec.describe ::Dorsale::ExpenseGun::Category, type: :model do
|
4
4
|
it { is_expected.to validate_presence_of :name }
|
5
5
|
|
6
6
|
it "category factory should be valid?" do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
3
|
RSpec.describe ::Dorsale::ExpenseGun::ExpenseLine, type: :model do
|
4
4
|
it { is_expected.to belong_to :expense }
|
@@ -8,7 +8,10 @@ RSpec.describe ::Dorsale::ExpenseGun::ExpenseLine, type: :model do
|
|
8
8
|
it { is_expected.to validate_presence_of :date }
|
9
9
|
it { is_expected.to validate_presence_of :total_all_taxes }
|
10
10
|
it { is_expected.to validate_presence_of :vat }
|
11
|
+
it { is_expected.to validate_presence_of :company_part }
|
11
12
|
it { is_expected.to validate_numericality_of(:total_all_taxes).is_greater_than_or_equal_to(0) }
|
13
|
+
it { is_expected.to validate_numericality_of(:company_part).is_greater_than_or_equal_to(0) }
|
14
|
+
it { is_expected.to validate_numericality_of(:company_part).is_less_than_or_equal_to(100.0) }
|
12
15
|
|
13
16
|
it "expense line factory should be valid?" do
|
14
17
|
expense_line = build :expense_gun_expense_line, expense: build(:expense_gun_expense)
|
@@ -21,33 +24,30 @@ RSpec.describe ::Dorsale::ExpenseGun::ExpenseLine, type: :model do
|
|
21
24
|
expect(expense_line.vat).to eq 123.0
|
22
25
|
end
|
23
26
|
|
24
|
-
it "#company_part should be present" do
|
25
|
-
expect(build(:expense_gun_expense_line)).to validate_presence_of :company_part
|
26
|
-
end
|
27
|
-
|
28
|
-
it "#company_part should be >=0 and <= 100" do
|
29
|
-
expect(build(:expense_gun_expense_line)).to validate_numericality_of(:company_part).is_greater_than_or_equal_to(0).is_less_than_or_equal_to(100.0)
|
30
|
-
end
|
31
|
-
|
32
27
|
it "#company_part should be 100 as default" do
|
33
|
-
expense_line =
|
28
|
+
expense_line = described_class.new
|
34
29
|
expect(expense_line.company_part).to eq 100.0
|
35
30
|
end
|
36
31
|
|
37
32
|
it "#employee_payback should be correct" do
|
38
|
-
expense_line =
|
33
|
+
expense_line = described_class.new(total_all_taxes: 100, company_part: 100)
|
39
34
|
expect(expense_line.employee_payback).to eq 100.0
|
40
35
|
|
41
|
-
expense_line =
|
36
|
+
expense_line = described_class.new(total_all_taxes: 250, company_part: 50)
|
42
37
|
expect(expense_line.employee_payback).to eq 125.0
|
43
38
|
|
44
|
-
expense_line =
|
39
|
+
expense_line = described_class.new(total_all_taxes: 200, company_part: 80)
|
45
40
|
expect(expense_line.employee_payback).to eq 160.0
|
46
41
|
end
|
47
42
|
|
48
43
|
it "#total_vat_deductible should be proportional to #company_part}" do
|
49
44
|
category = build(:expense_gun_category, vat_deductible: true)
|
50
|
-
expense_line = build(:expense_gun_expense_line,
|
45
|
+
expense_line = build(:expense_gun_expense_line,
|
46
|
+
:category => category,
|
47
|
+
:total_all_taxes => 200,
|
48
|
+
:vat => 40,
|
49
|
+
:company_part => 50,
|
50
|
+
)
|
51
51
|
expect(expense_line.total_vat_deductible).to eq 20.0
|
52
52
|
end
|
53
53
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe Dorsale::ExpenseGun::Expense, type: :model do
|
4
4
|
it { is_expected.to have_many(:expense_lines).dependent(:destroy) }
|
5
5
|
it { is_expected.to validate_presence_of :name }
|
6
6
|
it { is_expected.to validate_presence_of :date }
|
@@ -10,11 +10,11 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
it "default #date should be tody" do
|
13
|
-
expect(
|
13
|
+
expect(described_class.new.date).to eq Date.current
|
14
14
|
end
|
15
15
|
|
16
16
|
it "new expense should have new state" do
|
17
|
-
expect(
|
17
|
+
expect(described_class.new.current_state).to be :draft
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "new state" do
|
@@ -142,25 +142,35 @@ RSpec.describe ::Dorsale::ExpenseGun::Expense, type: :model do
|
|
142
142
|
|
143
143
|
it "#total_employee_payback should return sum of lines" do
|
144
144
|
expense = build(:expense_gun_expense, expense_lines: [])
|
145
|
-
|
146
|
-
|
145
|
+
|
146
|
+
line1 = build(:expense_gun_expense_line, total_all_taxes: 10, company_part: 100)
|
147
|
+
expense.expense_lines << line1
|
148
|
+
|
149
|
+
line2 = build(:expense_gun_expense_line, total_all_taxes: 10, company_part: 50)
|
150
|
+
expense.expense_lines << line2
|
151
|
+
|
147
152
|
expect(expense.total_employee_payback).to eq 15.0
|
148
153
|
end
|
149
154
|
|
150
155
|
it "#total_vat_deductible should return sum of lines" do
|
151
156
|
expense = build(:expense_gun_expense, expense_lines: [])
|
157
|
+
|
152
158
|
category1 = build(:expense_gun_category, vat_deductible: true)
|
159
|
+
line1 = build(:expense_gun_expense_line, vat: 10, category: category1, company_part: 50)
|
160
|
+
expense.expense_lines << line1
|
161
|
+
|
153
162
|
category2 = build(:expense_gun_category, vat_deductible: false)
|
154
|
-
|
155
|
-
expense.expense_lines <<
|
163
|
+
line2 = build(:expense_gun_expense_line, vat: 10, category: category2, company_part: 50)
|
164
|
+
expense.expense_lines << line2
|
165
|
+
|
156
166
|
expect(expense.total_vat_deductible).to eq 5.0
|
157
167
|
end
|
158
168
|
|
159
169
|
it "#may_edit? should return false unless expense is not submitted" do
|
160
|
-
expect(
|
161
|
-
expect(
|
162
|
-
expect(
|
163
|
-
expect(
|
164
|
-
expect(
|
170
|
+
expect(described_class.new(state: :draft).may_edit?).to be true
|
171
|
+
expect(described_class.new(state: :submitted).may_edit?).to be false
|
172
|
+
expect(described_class.new(state: :acceped).may_edit?).to be false
|
173
|
+
expect(described_class.new(state: :refused).may_edit?).to be false
|
174
|
+
expect(described_class.new(state: :canceled).may_edit?).to be false
|
165
175
|
end
|
166
176
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
3
|
describe Dorsale::Flyboy::TaskComment do
|
4
4
|
it { is_expected.to belong_to(:task) }
|
@@ -10,23 +10,23 @@ describe Dorsale::Flyboy::TaskComment do
|
|
10
10
|
it { is_expected.to belong_to :author }
|
11
11
|
it { is_expected.to validate_presence_of :author }
|
12
12
|
|
13
|
-
it
|
13
|
+
it "should have a valid factory" do
|
14
14
|
expect(build(:flyboy_task_comment)).to be_valid
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it "should update the task progress upon creation" do
|
18
18
|
task = create(:flyboy_task, progress: 10)
|
19
19
|
comment = create(:flyboy_task_comment, progress: 20, task: task)
|
20
20
|
expect(task.reload.progress).to eq(20)
|
21
21
|
end
|
22
22
|
|
23
|
-
it
|
23
|
+
it "should mark task as complete when progress == 100" do
|
24
24
|
task = create(:flyboy_task, progress: 10, done: false)
|
25
25
|
comment = create(:flyboy_task_comment, progress: 100, task: task)
|
26
26
|
expect(task.reload.done).to be true
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it "should mark task as un complete when progress < 100" do
|
30
30
|
task = create(:flyboy_task, progress: 100, done: true)
|
31
31
|
comment = create(:flyboy_task_comment, progress: 90, task: task)
|
32
32
|
expect(task.reload.done).to be false
|
@@ -50,6 +50,5 @@ describe Dorsale::Flyboy::TaskComment do
|
|
50
50
|
expect(comment1.reload.progress).to eq 30
|
51
51
|
expect(comment2.reload.progress).to eq 50
|
52
52
|
end
|
53
|
-
|
54
53
|
end
|
55
54
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rails_helper"
|
2
2
|
|
3
3
|
describe Dorsale::Flyboy::Task do
|
4
4
|
it { is_expected.to belong_to(:taskable) }
|
@@ -36,8 +36,8 @@ describe Dorsale::Flyboy::Task do
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
describe
|
40
|
-
it
|
39
|
+
describe "#validation" do
|
40
|
+
it "factory should be #valid?" do
|
41
41
|
expect(create(:flyboy_task)).to be_valid
|
42
42
|
end
|
43
43
|
end # describe '#validation'
|
@@ -60,28 +60,52 @@ describe Dorsale::Flyboy::Task do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should auto reset reminder_date" do
|
63
|
-
task = described_class.new(
|
63
|
+
task = described_class.new(
|
64
|
+
:term => "2017-04-12",
|
65
|
+
:reminder_type => "custom",
|
66
|
+
:reminder_date => "2017-04-11",
|
67
|
+
)
|
64
68
|
task.reminder_type = nil
|
65
69
|
expect(task.reminder_date).to eq nil
|
66
70
|
end
|
67
71
|
|
68
72
|
it "should auto set reminder_date by with days" do
|
69
|
-
task = described_class.new(
|
73
|
+
task = described_class.new(
|
74
|
+
:term => "2017-04-12",
|
75
|
+
:reminder_type => "duration",
|
76
|
+
:reminder_duration => 1,
|
77
|
+
:reminder_unit => "days",
|
78
|
+
)
|
70
79
|
expect(task.reminder_date).to eq Date.parse("2017-04-11")
|
71
80
|
end
|
72
81
|
|
73
82
|
it "should auto set reminder_date by with weeks" do
|
74
|
-
task = described_class.new(
|
83
|
+
task = described_class.new(
|
84
|
+
:term => "2017-04-12",
|
85
|
+
:reminder_type => "duration",
|
86
|
+
:reminder_duration => 2,
|
87
|
+
:reminder_unit => "weeks",
|
88
|
+
)
|
75
89
|
expect(task.reminder_date).to eq Date.parse("2017-03-29")
|
76
90
|
end
|
77
91
|
|
78
92
|
it "should auto set reminder_date by with months" do
|
79
|
-
task = described_class.new(
|
93
|
+
task = described_class.new(
|
94
|
+
:term => "2017-04-12",
|
95
|
+
:reminder_type => "duration",
|
96
|
+
:reminder_duration => 1,
|
97
|
+
:reminder_unit => "months",
|
98
|
+
)
|
80
99
|
expect(task.reminder_date).to eq Date.parse("2017-03-12")
|
81
100
|
end
|
82
101
|
|
83
102
|
it "update term should update reminder_date" do
|
84
|
-
task = described_class.new(
|
103
|
+
task = described_class.new(
|
104
|
+
:term => "2017-04-12",
|
105
|
+
:reminder_type => "duration",
|
106
|
+
:reminder_duration => 1,
|
107
|
+
:reminder_unit => "days",
|
108
|
+
)
|
85
109
|
expect(task.reminder_date).to eq Date.parse("2017-04-11")
|
86
110
|
task.term = "2017-04-25"
|
87
111
|
expect(task.reminder_date).to eq Date.parse("2017-04-24")
|
@@ -90,51 +114,51 @@ describe Dorsale::Flyboy::Task do
|
|
90
114
|
|
91
115
|
describe "scopes" do
|
92
116
|
it "should return delayed undone tasks" do
|
93
|
-
task
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
117
|
+
task = create(:flyboy_task, owner: @user1, term: Date.current+1)
|
118
|
+
task1 = create(:flyboy_task, owner: @user1, term: Date.current-1, done: true)
|
119
|
+
task2 = create(:flyboy_task, owner: @user1, term: Date.current-1, done: false)
|
120
|
+
task3 = create(:flyboy_task, owner: @user1, term: Date.current-2, done: true)
|
121
|
+
task4 = create(:flyboy_task, owner: @user1, term: Date.current-2, done: false)
|
98
122
|
tasks = ::Dorsale::Flyboy::Task.delayed
|
99
|
-
expect(tasks).to contain_exactly(
|
123
|
+
expect(tasks).to contain_exactly(task2, task4)
|
100
124
|
end
|
101
125
|
|
102
126
|
it "should return today undone tasks" do
|
103
|
-
task = create(:flyboy_task, owner: @user1, term:
|
104
|
-
|
105
|
-
|
127
|
+
task = create(:flyboy_task, owner: @user1, term: Date.current+1)
|
128
|
+
task1 = create(:flyboy_task, owner: @user1, term: Date.current, done: true)
|
129
|
+
task2 = create(:flyboy_task, owner: @user1, term: Date.current, done: false)
|
106
130
|
tasks = ::Dorsale::Flyboy::Task.today
|
107
|
-
expect(tasks).to contain_exactly(
|
131
|
+
expect(tasks).to contain_exactly(task2)
|
108
132
|
end
|
109
133
|
|
110
134
|
it "should return tomorrow undone tasks" do
|
111
|
-
task = create(:flyboy_task, owner: @user1, term:
|
112
|
-
|
113
|
-
|
135
|
+
task = create(:flyboy_task, owner: @user1, term: Date.current)
|
136
|
+
task1 = create(:flyboy_task, owner: @user1, term: Date.tomorrow, done: true)
|
137
|
+
task2 = create(:flyboy_task, owner: @user1, term: Date.tomorrow, done: false)
|
114
138
|
tasks = ::Dorsale::Flyboy::Task.tomorrow
|
115
|
-
expect(tasks).to contain_exactly(
|
139
|
+
expect(tasks).to contain_exactly(task2)
|
116
140
|
end
|
117
141
|
|
118
142
|
it "should return this week undone tasks" do
|
119
143
|
Timecop.freeze(2015, 5, 21, 12, 0, 0)
|
120
|
-
task = create(:flyboy_task, owner: @user1, term:
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
144
|
+
task = create(:flyboy_task, owner: @user1, term: Date.current-7, done: false)
|
145
|
+
task1 = create(:flyboy_task, owner: @user1, term: Date.current+2, done: true)
|
146
|
+
task2 = create(:flyboy_task, owner: @user1, term: Date.current+2, done: false)
|
147
|
+
task3 = create(:flyboy_task, owner: @user1, term: Date.current+3, done: false)
|
148
|
+
task4 = create(:flyboy_task, owner: @user1, term: Date.current+5, done: false)
|
125
149
|
tasks = ::Dorsale::Flyboy::Task.this_week
|
126
|
-
expect(tasks).to contain_exactly(
|
150
|
+
expect(tasks).to contain_exactly(task2, task3)
|
127
151
|
end
|
128
152
|
|
129
153
|
it "should return next week undone tasks" do
|
130
154
|
Timecop.freeze(2015, 5, 21)
|
131
|
-
task = create(:flyboy_task, owner: @user1, term:
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
155
|
+
task = create(:flyboy_task, owner: @user1, term: Date.current, done: false)
|
156
|
+
task1 = create(:flyboy_task, owner: @user1, term: Date.current+7, done: true)
|
157
|
+
task2 = create(:flyboy_task, owner: @user1, term: Date.current+7, done: false)
|
158
|
+
task3 = create(:flyboy_task, owner: @user1, term: Date.current+9, done: false)
|
159
|
+
task4 = create(:flyboy_task, owner: @user1, term: Date.current+12, done: false)
|
136
160
|
tasks = ::Dorsale::Flyboy::Task.next_week
|
137
|
-
expect(tasks).to contain_exactly(
|
161
|
+
expect(tasks).to contain_exactly(task2, task3)
|
138
162
|
end
|
139
163
|
end # describe "scopes"
|
140
164
|
|
@@ -144,8 +168,8 @@ describe Dorsale::Flyboy::Task do
|
|
144
168
|
let(:task_ontime) {
|
145
169
|
create(:flyboy_task,
|
146
170
|
:reminder_type => "custom",
|
147
|
-
:reminder_date =>
|
148
|
-
:term =>
|
171
|
+
:reminder_date => Date.current + 1.day,
|
172
|
+
:term => Date.current + 3.days,
|
149
173
|
:done => false,
|
150
174
|
)
|
151
175
|
}
|
@@ -159,8 +183,8 @@ describe Dorsale::Flyboy::Task do
|
|
159
183
|
let(:task_onwarning) {
|
160
184
|
create(:flyboy_task,
|
161
185
|
:reminder_type => "custom",
|
162
|
-
:reminder_date =>
|
163
|
-
:term =>
|
186
|
+
:reminder_date => Date.current,
|
187
|
+
:term => Date.current + 3.days,
|
164
188
|
:done => false,
|
165
189
|
)
|
166
190
|
}
|
@@ -174,8 +198,8 @@ describe Dorsale::Flyboy::Task do
|
|
174
198
|
let(:task_onalert) {
|
175
199
|
create(:flyboy_task,
|
176
200
|
:reminder_type => "custom",
|
177
|
-
:reminder_date =>
|
178
|
-
:term =>
|
201
|
+
:reminder_date => Date.current - 3.days,
|
202
|
+
:term => Date.current,
|
179
203
|
:done => false,
|
180
204
|
)
|
181
205
|
}
|
@@ -189,8 +213,8 @@ describe Dorsale::Flyboy::Task do
|
|
189
213
|
let(:task_done) {
|
190
214
|
create(:flyboy_task,
|
191
215
|
:reminder_type => "custom",
|
192
|
-
:reminder_date =>
|
193
|
-
:term =>
|
216
|
+
:reminder_date => Date.current - 3.days,
|
217
|
+
:term => Date.current - 1.day,
|
194
218
|
:done => true,
|
195
219
|
)
|
196
220
|
}
|