expense_gun 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e08be595ad351a7b620475f7c85e81d4e5956ae
4
- data.tar.gz: a3284770e9fd5d1d057087fe45ee708ce6790cc2
3
+ metadata.gz: 15ea68e1ac6d8376cfe784db24395eac0609e67d
4
+ data.tar.gz: f129be42141bda107a8f8172fa3fa13bb1cc24d4
5
5
  SHA512:
6
- metadata.gz: 44f9fb09c8b001ea8b5160f1a178cc428c67847e900e9cc0d72fea45d1f3bf996bbb9c7173aa2f7174627d814588cfca81b3f62402a4d5cd98a90271a0c7d235
7
- data.tar.gz: 9bb3e349247c589c2b7e3f79096667b641f72f3cdbaab2a6609529f96c5c7cdc52340fb55b3ee7b8379a7f289150a2a482c9acd454857d61e027246d8d7195d3
6
+ metadata.gz: 58cf6db79447a2f426b864d727c6815b96b117a1e05cd9cc7cf40493d4aef5da975ac1f4a94822ac93188a7ac3ed69ac6e0f327ef0fca7eb49bf9d0d9ec969a9
7
+ data.tar.gz: 9ac44f6a0586f92ed36d519079c1cb65b5ff57625d41f13d0f4ead85fc7ffddbfd4064fc290227004512fb1fe702fe6445ff80202d7663b223dd9e84ed782e54
@@ -3,5 +3,7 @@ module ExpenseGun
3
3
  def current_ability
4
4
  @current_ability ||= Ability.new(nil)
5
5
  end
6
+
7
+ helper AgilideeCommons::FormHelper
6
8
  end
7
9
  end
@@ -20,7 +20,7 @@ module ExpenseGun
20
20
  @expense_line = @expense.expense_lines.new(expense_line_params)
21
21
 
22
22
  if @expense_line.save
23
- flash[:success] = "Expense line created"
23
+ flash[:success] = t("expense_gun.expense_line.flash.created")
24
24
  redirect_to expense_path(@expense)
25
25
  else
26
26
  render :new
@@ -35,7 +35,7 @@ module ExpenseGun
35
35
  authorize! :edit, @expense
36
36
 
37
37
  if @expense_line.update_attributes(expense_line_params)
38
- flash[:success] = "Expense line updated"
38
+ flash[:success] = t("expense_gun.expense_line.flash.created")
39
39
  redirect_to expense_path(@expense)
40
40
  else
41
41
  render :edit
@@ -46,7 +46,7 @@ module ExpenseGun
46
46
  authorize! :edit, @expense
47
47
 
48
48
  @expense_line.destroy
49
- flash[:success] = "Expense line destroyed"
49
+ flash[:success] = t("expense_gun.expense_line.flash.created")
50
50
  redirect_to expense_path(@expense)
51
51
  end
52
52
 
@@ -34,7 +34,7 @@ module ExpenseGun
34
34
  @expense ||= Expense.new(expense_params)
35
35
 
36
36
  if @expense.save
37
- flash[:success] = "Expense created"
37
+ flash[:success] = t("expense_gun.expense.flash.created")
38
38
  redirect_to expense_path(@expense)
39
39
  else
40
40
  render :new
@@ -55,7 +55,7 @@ module ExpenseGun
55
55
  authorize! :edit, @expense
56
56
 
57
57
  if @expense.update_attributes(expense_params)
58
- flash[:success] = "Expense updated"
58
+ flash[:success] = t("expense_gun.expense.flash.updated")
59
59
  redirect_to expense_path(@expense)
60
60
  else
61
61
  render :edit
@@ -66,7 +66,7 @@ module ExpenseGun
66
66
  authorize! :submit, @expense
67
67
 
68
68
  @expense.submit!
69
- flash[:success] = "Expense submited"
69
+ flash[:success] = t("expense_gun.expense.flash.submited")
70
70
  redirect_to expenses_path
71
71
  end
72
72
 
@@ -74,7 +74,7 @@ module ExpenseGun
74
74
  authorize! :accept, @expense
75
75
 
76
76
  @expense.accept!
77
- flash[:success] = "Expense accepted"
77
+ flash[:success] = t("expense_gun.expense.flash.accepted")
78
78
  redirect_to expense_path(@expense)
79
79
  end
80
80
 
@@ -82,7 +82,7 @@ module ExpenseGun
82
82
  authorize! :refuse, @expense
83
83
 
84
84
  @expense.refuse!
85
- flash[:success] = "Expense refused"
85
+ flash[:success] = t("expense_gun.expense.flash.refused")
86
86
  redirect_to expenses_path
87
87
  end
88
88
 
@@ -90,7 +90,7 @@ module ExpenseGun
90
90
  authorize! :cancel, @expense
91
91
 
92
92
  @expense.cancel!
93
- flash[:success] = "Expense canceled"
93
+ flash[:success] = t("expense_gun.expense.flash.canceled")
94
94
  redirect_to expenses_path
95
95
  end
96
96
 
@@ -2,7 +2,7 @@ module ExpenseGun
2
2
  class Expense < ActiveRecord::Base
3
3
  include AASM
4
4
 
5
- has_many :expense_lines, inverse_of: :expense
5
+ has_many :expense_lines, inverse_of: :expense, dependent: :destroy
6
6
 
7
7
  validates :name, presence: true
8
8
  validates :date, presence: true
@@ -15,6 +15,9 @@ module ExpenseGun
15
15
  validates :vat, presence: true, numericality: {greater_than_or_equal_to: 1.0}
16
16
  validates :company_part, presence: true, numericality: {greater_than_or_equal_to: 1.0, less_than_or_equal_to: 100.0}
17
17
 
18
+ # simple_form
19
+ validates :category_id, presence: true
20
+
18
21
  def employee_payback
19
22
  (total_all_taxes * company_part / 100)
20
23
  end
@@ -1,16 +1,14 @@
1
- = form [expense_gun, @expense, @expense_line] do |f|
1
+ = horizontal_form_for [expense_gun, @expense, @expense_line] do |f|
2
2
  .panel.panel-default
3
3
  .panel-body
4
4
  .row
5
5
  .col-md-6
6
6
  = f.input :name
7
7
  = f.input :date, as: :string, input_html: {type: :date}
8
- .form-group
9
- label for="expense_line_category_id" Category
10
- = f.collection_select :category_id, ExpenseGun::Category.all, :id, :name, {include_blank: true}, {class: "form-control"}
8
+ = f.input :category_id, collection: ExpenseGun::Category.all
11
9
  .col-md-6
12
10
  = f.input :total_all_taxes
13
11
  = f.input :vat
14
12
  = f.input :company_part
15
13
 
16
- = f.actions
14
+ = form_buttons back_url: false
@@ -1,4 +1,8 @@
1
- h1 Edit expense line
2
-
3
1
  .expenses.expense_lines
2
+ .actions-block
3
+ = link_to t("expense_gun.expense_line.back_to_expense"), expense_gun.expense_path(@expense), class: "btn btn-default"
4
+ = link_to t("expense_gun.expense.list"), expense_gun.expenses_path, class: "btn btn-default"
5
+
6
+ h1 = t("expense_gun.expense_line.edit")
7
+
4
8
  = render "form"
@@ -1,4 +1,11 @@
1
- h1 = "#{@expense.name} : New expense line"
2
-
3
1
  .expenses.expense_lines
2
+ .actions-block
3
+ = link_to t("expense_gun.expense_line.back_to_expense"), expense_gun.expense_path(@expense), class: "btn btn-default"
4
+ = link_to t("expense_gun.expense.list"), expense_gun.expenses_path, class: "btn btn-default"
5
+
6
+ h1
7
+ = @expense.name
8
+ = " : "
9
+ = t("expense_gun.expense_line.new")
10
+
4
11
  = render "form"
@@ -1,5 +1,5 @@
1
1
  .row: .col-md-6
2
- = form [expense_gun, @expense] do |f|
2
+ = horizontal_form_for [expense_gun, @expense] do |f|
3
3
  = f.input :name
4
4
  = f.input :date, as: :string, input_html: {type: :date}
5
- = f.actions
5
+ = form_buttons back_url: false
@@ -1,4 +1,7 @@
1
- h1 = @expense.name
2
-
3
1
  .expenses
2
+ .actions-block
3
+ = link_to t("expense_gun.expense.list"), expense_gun.expenses_path, class: "btn btn-default"
4
+
5
+ h1 = @expense.name
6
+
4
7
  = render "form"
@@ -1,4 +1,4 @@
1
- h1 Expenses list
1
+ h1 = t("expense_gun.expense.list")
2
2
 
3
3
  .row.expenses
4
4
  .col-md-4
@@ -6,17 +6,17 @@ h1 Expenses list
6
6
  - for state in %w(submited new accepted refused canceled)
7
7
  li class=("active" if params[:state] == state)
8
8
  a href=expense_gun.url_for(state: state)
9
- = state.capitalize
9
+ = t("labels.states.#{state}").pluralize
10
10
  span.badge.pull-right = @all_expenses.where(state: state).count
11
11
 
12
12
  li class=("active" if params[:state] == "all")
13
13
  a href=expense_gun.url_for(state: "all")
14
- = "All"
14
+ = t("labels.states.all")
15
15
  span.badge.pull-right = @all_expenses.count
16
16
 
17
17
  hr
18
18
 
19
- p = link_to "New expense", expense_gun.new_expense_path, class: "btn btn-success"
19
+ p = link_to t("expense_gun.expense.new"), expense_gun.new_expense_path, class: "btn btn-success"
20
20
 
21
21
  .col-md-8
22
22
  - for expense in @expenses
@@ -28,36 +28,35 @@ h1 Expenses list
28
28
  .col-md-4
29
29
  .date = expense.date
30
30
  .panel-body
31
- .row: .col-md-6
32
- p
33
- strong = "Employee :"
34
- = expense.user.full_name if expense.respond_to?(:user)
35
-
36
- p
37
- strong = "State :"
38
- = expense.current_state.capitalize
39
-
40
- p
41
- strong = "Total all taxes :"
42
- = "#{expense.total_all_taxes} €"
31
+ p
32
+ strong = t("labels.employee") + " : "
33
+ = expense.user.full_name if expense.respond_to?(:user)
34
+
35
+ p
36
+ strong = t("labels.state") + " : "
37
+ = t("labels.states.#{expense.current_state}")
38
+
39
+ p
40
+ strong = t("labels.total_all_taxes") + " : "
41
+ = "#{expense.total_all_taxes} "
43
42
 
44
43
  .panel-footer
45
- = link_to "Show", expense_gun.expense_path(expense), class: "btn btn-default"
44
+ = link_to t("expense_gun.expense.show"), expense_gun.expense_path(expense), class: "btn btn-default"
46
45
 
47
46
  - if can? :edit, expense
48
- = link_to "Edit", expense_gun.edit_expense_path(expense), class: "btn btn-default"
47
+ = link_to t("expense_gun.expense.edit"), expense_gun.edit_expense_path(expense), class: "btn btn-default"
49
48
 
50
49
  - if can? :submit, expense
51
- = link_to "Submit", expense_gun.submit_expense_path(expense), data: {method: "patch"}, class: "btn btn-primary"
50
+ = link_to t("expense_gun.expense.submit"), expense_gun.submit_expense_path(expense), data: {method: "patch"}, class: "btn btn-primary"
52
51
 
53
52
  - if can? :accept, expense
54
- = link_to "Accept", expense_gun.accept_expense_path(expense), data: {method: "patch"}, class: "btn btn-success"
53
+ = link_to t("expense_gun.expense.accept"), expense_gun.accept_expense_path(expense), data: {method: "patch"}, class: "btn btn-success"
55
54
 
56
55
  - if can? :refuse, expense
57
- = link_to "Refuse", expense_gun.refuse_expense_path(expense), data: {method: "patch"}, class: "btn btn-danger"
56
+ = link_to t("expense_gun.expense.refuse"), expense_gun.refuse_expense_path(expense), data: {method: "patch"}, class: "btn btn-danger"
58
57
 
59
58
  - if can? :cancel, expense
60
- = link_to "Cancel", expense_gun.cancel_expense_path(expense), data: {method: "patch"}, class: "btn btn-warning"
59
+ = link_to t("expense_gun.expense.cancel"), expense_gun.cancel_expense_path(expense), data: {method: "patch"}, class: "btn btn-warning"
61
60
 
62
61
 
63
62
  == paginate @expenses, theme: "bootstrap3"
@@ -1,4 +1,7 @@
1
- h1 New Expense
2
-
3
1
  .expenses
2
+ .actions-block
3
+ = link_to t("expense_gun.expense.list"), expense_gun.expenses_path, class: "btn btn-default"
4
+
5
+ h1 = t("expense_gun.expense.new")
6
+
4
7
  = render "form"
@@ -1,25 +1,30 @@
1
1
  .expenses
2
2
  .actions-block.hidden-print
3
3
  - if can? :edit, @expense
4
- = link_to "New expense line", expense_gun.new_expense_expense_line_path(@expense), class: "btn btn-success"
5
- = link_to "Edit expense", expense_gun.edit_expense_path(@expense), class: "btn btn-default"
6
- = link_to "Expenses list", expense_gun.expenses_path, class: "btn btn-default"
7
- a.btn.btn-default href="#" onclick="print(); return false;" = "Print"
4
+ = link_to t("expense_gun.expense_line.new"), expense_gun.new_expense_expense_line_path(@expense), class: "btn btn-success"
5
+ = link_to t("expense_gun.expense.edit"), expense_gun.edit_expense_path(@expense), class: "btn btn-default"
6
+
7
+ = link_to t("expense_gun.expense.list"), expense_gun.expenses_path, class: "btn btn-default"
8
+
9
+ a.btn.btn-default href="#" onclick="print(); return false;" = t("expense_gun.expense.print")
8
10
 
9
- h1 = "Expense : #{@expense.name}"
11
+ h1
12
+ = t("expense_gun.expense.label")
13
+ = " : "
14
+ = @expense.name
10
15
 
11
16
  p
12
17
  span.date
13
- strong = "Date : "
18
+ strong = t("labels.date") + " : "
14
19
  = @expense.date
15
20
  br
16
21
  span.user
17
- strong = "Employee : "
22
+ strong = t("labels.employee") + " : "
18
23
  = @expense.user.full_name if @expense.respond_to?(:user)
19
24
  br
20
- span.state
21
- strong = "State : "
22
- = @expense.state.capitalize
25
+ span.state class="#{@expense.state}"
26
+ strong = t("labels.state") + " : "
27
+ = t "labels.states." + @expense.state
23
28
 
24
29
  hr
25
30
 
@@ -30,39 +35,39 @@
30
35
  .row
31
36
  .col-md-6
32
37
  p
33
- strong = "Name :"
38
+ strong = t("labels.name") + " : "
34
39
  = expense_line.name
35
40
  p
36
- strong = "Date :"
41
+ strong = t("labels.date") + " : "
37
42
  = expense_line.date
38
43
  p
39
- strong = "Category :"
44
+ strong = t("labels.category") + " : "
40
45
  = expense_line.category.name
41
46
  - if expense_line.category.code.present?
42
47
  = " (#{expense_line.category.code})"
43
48
  .col-md-6
44
49
  p
45
- strong = "Total all taxes :"
50
+ strong = t("labels.total_all_taxes") + " : "
46
51
  = "#{expense_line.total_all_taxes} €"
47
52
  p
48
- strong = "Tax :"
53
+ strong = t("labels.vat") + " : "
49
54
  = "#{expense_line.vat} €"
50
55
  p
51
- strong = "Company part :"
56
+ strong = t("labels.company_part") + " : "
52
57
  = "#{expense_line.company_part} %"
53
58
 
54
59
  .panel-footer
55
60
  .row
56
61
  .col-md-6.hidden-print
57
62
  - if can? :edit, @expense
58
- = link_to "Edit", expense_gun.edit_expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-default"
59
- = link_to "Destroy", expense_gun.expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-danger", "data-method" => "delete", "data-confirm" => "Confirm ?"
63
+ = link_to t("expense_gun.expense_line.edit"), expense_gun.edit_expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-default"
64
+ = link_to t("expense_gun.expense_line.destroy"), expense_gun.expense_expense_line_path(expense_line.expense, expense_line), class: "btn btn-danger", "data-method" => "delete", "data-confirm" => "Confirm ?"
60
65
  .col-md-6
61
66
  p
62
- strong = "Employee payback :"
67
+ strong = t("labels.employee_payback") + " : "
63
68
  = "#{expense_line.employee_payback} €"
64
69
  p
65
- strong = "Deductible VAT :"
70
+ strong = t("labels.deductible_vat") + " : "
66
71
  = "#{expense_line.total_vat_deductible} €"
67
72
 
68
73
  hr
@@ -71,14 +76,14 @@
71
76
  .panel-body
72
77
  .row
73
78
  .col-md-6
74
- strong = "Total :"
79
+ strong = t("labels.total") + " : "
75
80
  .col-md-6
76
81
  p
77
- strong = "Total all taxes :"
82
+ strong = t("labels.total_all_taxes") + " : "
78
83
  = "#{@expense.total_all_taxes} €"
79
84
  p
80
- strong = "Employee payback :"
85
+ strong = t("labels.employee_payback") + " : "
81
86
  = "#{@expense.total_employee_payback} €"
82
87
  p
83
- strong = "Deductible VAT :"
88
+ strong = t("labels.deductible_vat") + " : "
84
89
  = "#{@expense.total_vat_deductible} €"
@@ -0,0 +1,72 @@
1
+ fr:
2
+ expense_gun:
3
+ expense:
4
+ label : "Note de frais"
5
+ list : "Liste des notes de frais"
6
+ new : "Nouvelle note de frais"
7
+ edit : "Modifier la note"
8
+ print : "Imprimer"
9
+ show : "Afficher"
10
+ edit : "Modifier"
11
+ submit : "Soumettre"
12
+ accept : "Accepter"
13
+ refuse : "Refuser"
14
+ cancel : "Annuler"
15
+ flash:
16
+ created : "La note de frais a été créée."
17
+ updated : "La note de frais a été mise à jour."
18
+ submited : "La note de frais a été soumise."
19
+ accepted : "La note de frais a été acceptée."
20
+ refused : "La note de frais a été refusée."
21
+ canceled : "La note de frais a été annulée."
22
+
23
+ expense_line:
24
+ label : "Frais"
25
+ new : "Nouveau frais"
26
+ edit : "Modifier"
27
+ destroy : "Supprimer"
28
+ back_to_expense : "Retour à la note"
29
+ flash:
30
+ created : "Le frais a été ajouté."
31
+ updated : "Le frais a été modifié."
32
+ destroyed : "Le frais a été supprimé."
33
+
34
+ labels: &labels
35
+ name : "Nom"
36
+ date : "Date"
37
+ category : "Catégorie"
38
+ category_id : "Catégorie"
39
+ total_all_taxes : "Total TTC"
40
+ vat : "TVA"
41
+ company_part : "Part entreprise"
42
+ employee : "Employé"
43
+ state : "État"
44
+ employee_payback : "Remboursement employé"
45
+ deductible_vat : "TVA déductible"
46
+ total : "Total"
47
+
48
+ states:
49
+ all : "Toutes"
50
+ new : "Nouvelle"
51
+ submited : "Soumise"
52
+ accepted : "Accepée"
53
+ refused : "Refusée"
54
+ canceled : "Annulée"
55
+
56
+ simple_form:
57
+ "yes" : 'Oui'
58
+ "no" : 'Non'
59
+
60
+ required:
61
+ text: 'Requis'
62
+ mark: '*'
63
+
64
+ error_notification:
65
+ default_message: "Merci de vérifier les problèmes ci-desous :"
66
+
67
+ labels:
68
+ defaults:
69
+ <<: *labels
70
+
71
+ options:
72
+ defaults:
@@ -1,12 +1,12 @@
1
1
  ActiveAdmin.register ExpenseGun::Category do
2
2
  scope :all, default: true
3
3
 
4
- permit_params :name, :code, :tax_deductible
4
+ permit_params :name, :code, :vat_deductible
5
5
 
6
6
  index do
7
7
  column :name
8
8
  column :code
9
- column :tax_deductible
9
+ column :vat_deductible
10
10
  actions
11
11
  end
12
12
  end
@@ -1,3 +1,3 @@
1
1
  module ExpenseGun
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -17,7 +17,7 @@ module Dummy
17
17
 
18
18
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
19
19
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
20
- # config.i18n.default_locale = :de
20
+ config.i18n.default_locale = :fr
21
21
  end
22
22
  end
23
23
 
@@ -0,0 +1,2 @@
1
+ require "agilidee_commons/simple_form"
2
+ require "agilidee_commons/simple_form_bootstrap"
@@ -40,7 +40,7 @@ describe ExpenseGun::ExpenseLine do
40
40
  it "#vat should be decimal" do
41
41
  expense_line = FactoryGirl.build(:expense_line, vat: 123)
42
42
  expect(expense_line.valid?).to be false
43
- expect(expense_line.vat).to be 123.0
43
+ expect(expense_line.vat).to eq 123.0
44
44
  end
45
45
 
46
46
  it "#company_part should be present" do
@@ -53,29 +53,29 @@ describe ExpenseGun::ExpenseLine do
53
53
 
54
54
  it "#company_part should be 100 as default" do
55
55
  expense_line = ExpenseGun::ExpenseLine.new
56
- expect(expense_line.company_part).to be 100.0
56
+ expect(expense_line.company_part).to eq 100.0
57
57
  end
58
58
 
59
59
  it "#employee_payback should be correct" do
60
60
  expense_line = ExpenseGun::ExpenseLine.new(total_all_taxes: 100, company_part: 100)
61
- expect(expense_line.employee_payback).to be 100.0
61
+ expect(expense_line.employee_payback).to eq 100.0
62
62
 
63
63
  expense_line = ExpenseGun::ExpenseLine.new(total_all_taxes: 250, company_part: 50)
64
- expect(expense_line.employee_payback).to be 125.0
64
+ expect(expense_line.employee_payback).to eq 125.0
65
65
 
66
66
  expense_line = ExpenseGun::ExpenseLine.new(total_all_taxes: 200, company_part: 80)
67
- expect(expense_line.employee_payback).to be 160.0
67
+ expect(expense_line.employee_payback).to eq 160.0
68
68
  end
69
69
 
70
70
  it "#total_vat_deductible should be #vat if categorie is vat_decuctible" do
71
71
  category = FactoryGirl.build(:category, vat_deductible: true)
72
72
  expense_line = FactoryGirl.build(:expense_line, category: category)
73
- expect(expense_line.total_vat_deductible).to be expense_line.vat
73
+ expect(expense_line.total_vat_deductible).to eq expense_line.vat
74
74
  end
75
75
 
76
76
  it "#total_vat_deductible should be 0 if categorie is non vat_decuctible" do
77
77
  category = FactoryGirl.build(:category, vat_deductible: false)
78
78
  expense_line = FactoryGirl.build(:expense_line, category: category)
79
- expect(expense_line.total_vat_deductible).to be 0.0
79
+ expect(expense_line.total_vat_deductible).to eq 0.0
80
80
  end
81
81
  end
@@ -142,14 +142,14 @@ describe ExpenseGun::Expense do
142
142
  expense = FactoryGirl.build(:expense, expense_lines: [])
143
143
  expense.expense_lines << FactoryGirl.build(:expense_line, total_all_taxes: 10)
144
144
  expense.expense_lines << FactoryGirl.build(:expense_line, total_all_taxes: 10)
145
- expect(expense.total_all_taxes).to be 20.0
145
+ expect(expense.total_all_taxes).to eq 20.0
146
146
  end
147
147
 
148
148
  it "#total_employee_payback should return sum of lines" do
149
149
  expense = FactoryGirl.build(:expense, expense_lines: [])
150
150
  expense.expense_lines << FactoryGirl.build(:expense_line, total_all_taxes: 10, company_part: 100)
151
151
  expense.expense_lines << FactoryGirl.build(:expense_line, total_all_taxes: 10, company_part: 50)
152
- expect(expense.total_employee_payback).to be 15.0
152
+ expect(expense.total_employee_payback).to eq 15.0
153
153
  end
154
154
 
155
155
  it "#total_vat_deductible should return sum of lines" do
@@ -158,7 +158,7 @@ describe ExpenseGun::Expense do
158
158
  category2 = FactoryGirl.build(:category, vat_deductible: false)
159
159
  expense.expense_lines << FactoryGirl.build(:expense_line, vat: 10, category: category1)
160
160
  expense.expense_lines << FactoryGirl.build(:expense_line, vat: 10, category: category2)
161
- expect(expense.total_vat_deductible).to be 10.0
161
+ expect(expense.total_vat_deductible).to eq 10.0
162
162
  end
163
163
 
164
164
  it "#may_edit? should return false unless expense is not submited" do
@@ -168,4 +168,14 @@ describe ExpenseGun::Expense do
168
168
  expect(ExpenseGun::Expense.new(state: :refused).may_edit?).to be false
169
169
  expect(ExpenseGun::Expense.new(state: :canceled).may_edit?).to be false
170
170
  end
171
+
172
+ it "destroy an expense should destroy associated expense lines" do
173
+ expense = FactoryGirl.create(:expense)
174
+ expense_line_ids = expense.expense_lines.map(&:id)
175
+ expect(expense_line_ids.any?).to be true
176
+ expense.destroy
177
+ expense_line_ids.map do |id|
178
+ expect(ExpenseGun::ExpenseLine.exists?(id)).to be false
179
+ end
180
+ end
171
181
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ ENV["RAILS_ENV"] = 'test'
2
+ require 'spec_helper'
3
+ require File.expand_path("../dummy/config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+
1
6
  # This file was generated by the `rails generate rspec:install` command. Conventionally, all
2
7
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
8
  # The generated `.rspec` file contains `--require spec_helper` which will cause this
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expense_gun
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AGILiDEE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: formtastic-bootstrap
112
+ name: simple_form
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '>='
@@ -182,7 +182,7 @@ files:
182
182
  - app/views/kaminari/bootstrap3/_page.html.slim
183
183
  - app/views/kaminari/bootstrap3/_paginator.html.slim
184
184
  - config/cucumber.yml
185
- - config/initializers/formtastic.rb
185
+ - config/locales/expense_gun.fr.yml
186
186
  - config/routes.rb
187
187
  - db/migrate/20141201092102_create_expense_gun_expenses.rb
188
188
  - db/migrate/20141201100548_expenses_add_state.rb
@@ -225,6 +225,7 @@ files:
225
225
  - spec/dummy/config/initializers/inflections.rb
226
226
  - spec/dummy/config/initializers/mime_types.rb
227
227
  - spec/dummy/config/initializers/session_store.rb
228
+ - spec/dummy/config/initializers/simple_form.rb
228
229
  - spec/dummy/config/initializers/wrap_parameters.rb
229
230
  - spec/dummy/config/locales/en.yml
230
231
  - spec/dummy/config/routes.rb
@@ -296,6 +297,7 @@ test_files:
296
297
  - spec/dummy/config/initializers/inflections.rb
297
298
  - spec/dummy/config/initializers/mime_types.rb
298
299
  - spec/dummy/config/initializers/session_store.rb
300
+ - spec/dummy/config/initializers/simple_form.rb
299
301
  - spec/dummy/config/initializers/wrap_parameters.rb
300
302
  - spec/dummy/config/locales/en.yml
301
303
  - spec/dummy/config/routes.rb
@@ -1,78 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # Set the default text field size when input is a string. Default is nil.
4
- # Formtastic::FormBuilder.default_text_field_size = 50
5
-
6
- # Set the default text area height when input is a text. Default is 20.
7
- Formtastic::FormBuilder.default_text_area_height = nil
8
-
9
- # Set the default text area width when input is a text. Default is nil.
10
- Formtastic::FormBuilder.default_text_area_width = nil
11
-
12
- # Should all fields be considered "required" by default?
13
- # Defaults to true.
14
- Formtastic::FormBuilder.all_fields_required_by_default = false
15
-
16
- # Should select fields have a blank option/prompt by default?
17
- # Defaults to true.
18
- Formtastic::FormBuilder.include_blank_for_select_by_default = false
19
-
20
- # Set the string that will be appended to the labels/fieldsets which are required
21
- # It accepts string or procs and the default is a localized version of
22
- # '<abbr title="required">*</abbr>'. In other words, if you configure formtastic.required
23
- # in your locale, it will replace the abbr title properly. But if you don't want to use
24
- # abbr tag, you can simply give a string as below
25
- Formtastic::FormBuilder.required_string = "*"
26
-
27
- # Set the string that will be appended to the labels/fieldsets which are optional
28
- # Defaults to an empty string ("") and also accepts procs (see required_string above)
29
- # Formtastic::FormBuilder.optional_string = "(optional)"
30
-
31
- # Set the way inline errors will be displayed.
32
- # Defaults to :sentence, valid options are :sentence, :list, :first and :none
33
- # Formtastic::FormBuilder.inline_errors = :sentence
34
- # Formtastic uses the following classes as default for hints, inline_errors and error list
35
-
36
- # If you override the class here, please ensure to override it in your stylesheets as well
37
- # Formtastic::FormBuilder.default_hint_class = "inline-hints"
38
- # Formtastic::FormBuilder.default_inline_error_class = "inline-errors"
39
- # Formtastic::FormBuilder.default_error_list_class = "errors"
40
-
41
- # Set the method to call on label text to transform or format it for human-friendly
42
- # reading when formtastic is used without object. Defaults to :humanize.
43
- # Formtastic::FormBuilder.label_str_method = :humanize
44
-
45
- # Set the array of methods to try calling on parent objects in :select and :radio inputs
46
- # for the text inside each @<option>@ tag or alongside each radio @<input>@. The first method
47
- # that is found on the object will be used.
48
- # Defaults to ["to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
49
- # Formtastic::FormBuilder.collection_label_methods = [
50
- # "to_label", "display_name", "full_name", "name", "title", "username", "login", "value", "to_s"]
51
-
52
- # Specifies if labels/hints for input fields automatically be looked up using I18n.
53
- # Default value: true. Overridden for specific fields by setting value to true,
54
- # i.e. :label => true, or :hint => true (or opposite depending on initialized value)
55
- Formtastic::FormBuilder.i18n_lookups_by_default = {label: true, hint: true}
56
-
57
- # Specifies if I18n lookups of the default I18n Localizer should be cached to improve performance.
58
- # Defaults to true.
59
- Formtastic::FormBuilder.i18n_cache_lookups = false
60
-
61
- # Specifies the class to use for localization lookups. You can create your own
62
- # class and use it instead by subclassing Formtastic::Localizer (which is the default).
63
- # Formtastic::FormBuilder.i18n_localizer = MyOwnLocalizer
64
-
65
- # You can add custom inputs or override parts of Formtastic by subclassing Formtastic::FormBuilder and
66
- # specifying that class here. Defaults to Formtastic::FormBuilder.
67
- Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
68
-
69
- # You can opt-in to Formtastic's use of the HTML5 `required` attribute on `<input>`, `<select>`
70
- # and `<textarea>` tags by setting this to false (defaults to true).
71
- Formtastic::FormBuilder.use_required_attribute = false
72
-
73
- # You can opt-in to new HTML5 browser validations (for things like email and url inputs) by setting
74
- # this to false. Doing so will add a `novalidate` attribute to the `<form>` tag.
75
- # See http://diveintohtml5.org/forms.html#validation for more info.
76
- # Formtastic::FormBuilder.perform_browser_validations = true
77
-
78
- Formtastic::FormBuilder.escape_html_entities_in_hints_and_labels = false