dorsale 3.1.5 → 3.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/app/assets/javascripts/dorsale/common/forms.coffee +15 -0
  4. data/app/filters/dorsale/billing_machine/small_data/filter_for_invoices.rb +3 -1
  5. data/app/filters/dorsale/billing_machine/small_data/filter_for_quotations.rb +3 -1
  6. data/app/filters/dorsale/small_data/filter_strategy_by_key_value.rb +5 -0
  7. data/app/filters/dorsale/small_data/filter_strategy_by_time_period.rb +37 -0
  8. data/app/helpers/dorsale/filters_helper.rb +10 -4
  9. data/app/models/dorsale/users/avatar.rb +1 -1
  10. data/app/views/dorsale/billing_machine/invoices/_filters.html.slim +3 -0
  11. data/app/views/dorsale/billing_machine/quotations/_filters.html.slim +3 -0
  12. data/config/locales/common.en.yml +11 -5
  13. data/config/locales/common.fr.yml +11 -5
  14. data/features/billing_machine_invoices.feature +16 -1
  15. data/features/step_definitions/billing_machine_invoices_steps.rb +8 -4
  16. data/features/step_definitions/billing_machine_quotations_steps.rb +1 -1
  17. data/features/step_definitions/common_steps.rb +11 -0
  18. data/features/step_definitions/expense_gun_expenses_steps.rb +2 -1
  19. data/features/step_definitions/flyboy_tasks_steps.rb +5 -8
  20. data/features/support/ajax.rb +3 -3
  21. data/features/support/poltergeist.rb +1 -1
  22. data/features/support/turbolinks.rb +5 -5
  23. data/lib/dorsale/version.rb +1 -1
  24. data/spec/controllers/dorsale/billing_machine/invoices_controller_spec.rb +95 -1
  25. data/spec/models/dorsale/users_spec.rb +7 -0
  26. metadata +3 -3
  27. data/app/filters/dorsale/billing_machine/small_data/filter_strategy_by_time_period.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab35fd3bd7ff911c82f7cf26249d46ec366f7343
4
- data.tar.gz: f059076ae48a78dfdaa084a0b98a69a767f5ac50
3
+ metadata.gz: f873a20e46bfa3caee9df65c30c74c9a8451a2e8
4
+ data.tar.gz: cc19ee4d7718957697d931b30b654569e86f99c2
5
5
  SHA512:
6
- metadata.gz: 1271a885eb35373f63da05c7770e97d9843734d17e6383c990a9575c351b413160b7d7794fbd7137a60adc46255ffc18f47441a635c3b0d251239552c5bfe428
7
- data.tar.gz: 6cac76a354bdd85720155cac90c37c70e74acd938a5d7ae53083454fcd2ceafc5f11102124f78eaacb5fe51dfbaa5927b4e2a55bca41d978b0ad338b617f3f82
6
+ metadata.gz: 39bfb09fcf7dabbc4e863cc69d62f7901ef668b1e53f215135cf1414b20058319fb14b89c329ffcfb78d8cf507178e681b66e55c17933340486fdcaa19c0a725
7
+ data.tar.gz: 3fbf7ff0e239aed72868926e6829510dc8b565c627c303850fe4fb1320e387cbbe5a3d78f9ddfbffc687722ad9b5034ba023bae18c7282423ebac37ab0f7f7cf
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.6
4
+
5
+ - Migrate tests to PhantomJS 2
6
+ - Add more time period filters
7
+ - Fix avatar concern error
8
+
3
9
  ## 3.1.5
4
10
 
5
11
  - Move filters to app/filters
@@ -52,3 +52,18 @@ $(document).on "ready turbolinks:load page:load", ->
52
52
  input.name = "form_url"
53
53
  input.value = location.href
54
54
  $(this).append(input)
55
+
56
+ $("select").map ->
57
+ select = $(this)
58
+ form = select.parents("form")
59
+
60
+ return if select.find("[value=custom_date]").length == 0
61
+
62
+ select.change ->
63
+ if select.val() == "custom_date"
64
+ form.find(".form-group[class*=date_begin], .form-group[class*=date_end]").show()
65
+ else
66
+ form.find("input[id*=date_begin], input[id*=date_end]").val("")
67
+ form.find(".form-group[class*=date_begin], .form-group[class*=date_end]").hide()
68
+
69
+ select.change()
@@ -1,7 +1,9 @@
1
1
  class Dorsale::BillingMachine::SmallData::FilterForInvoices < ::Dorsale::SmallData::Filter
2
2
  STRATEGIES = {
3
3
  "customer_guid" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByCustomer.new,
4
- "bm_time_period" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByTimePeriod.new(:date),
4
+ "bm_time_period" => ::Dorsale::SmallData::FilterStrategyByTimePeriod.new(:date),
5
+ "bm_date_begin" => ::Dorsale::SmallData::FilterStrategyByDateBegin.new(:date),
6
+ "bm_date_end" => ::Dorsale::SmallData::FilterStrategyByDateEnd.new(:date),
5
7
  "bm_payment_status" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByPaymentStatus.new,
6
8
  }
7
9
  end
@@ -1,7 +1,9 @@
1
1
  class Dorsale::BillingMachine::SmallData::FilterForQuotations < ::Dorsale::SmallData::Filter
2
2
  STRATEGIES = {
3
3
  "customer_guid" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByCustomer.new,
4
- "bm_time_period" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByTimePeriod.new(:date),
4
+ "bm_time_period" => ::Dorsale::SmallData::FilterStrategyByTimePeriod.new(:date),
5
+ "bm_date_begin" => ::Dorsale::SmallData::FilterStrategyByDateBegin.new(:date),
6
+ "bm_date_end" => ::Dorsale::SmallData::FilterStrategyByDateEnd.new(:date),
5
7
  "bm_quotation_state" => ::Dorsale::BillingMachine::SmallData::FilterStrategyByState.new,
6
8
  }
7
9
  end
@@ -6,6 +6,11 @@ class Dorsale::SmallData::FilterStrategyByKeyValue < ::Dorsale::SmallData::Filte
6
6
  end
7
7
 
8
8
  def apply(query, value)
9
+ value = true if value == "true"
10
+ value = false if value == "false"
11
+ value = nil if value == "nil"
12
+ value = nil if value == "null"
13
+
9
14
  query.where("#{key} = ?", value)
10
15
  end
11
16
  end
@@ -0,0 +1,37 @@
1
+ class Dorsale::SmallData::FilterStrategyByTimePeriod < ::Dorsale::SmallData::FilterStrategyByKeyValue
2
+ def apply(query, value)
3
+ if value == "today"
4
+ a = Time.zone.now.beginning_of_day
5
+ b = Time.zone.now.end_of_day
6
+ elsif value == "yesterday"
7
+ a = (Time.zone.now - 1.day).beginning_of_day
8
+ b = (Time.zone.now - 1.day).end_of_day
9
+ elsif value == "this_week"
10
+ a = Time.zone.now.beginning_of_week
11
+ b = Time.zone.now.end_of_week
12
+ elsif value == "this_month"
13
+ a = Time.zone.now.beginning_of_month
14
+ b = Time.zone.now.end_of_month
15
+ elsif value == "this_year"
16
+ a = Time.zone.now.beginning_of_year
17
+ b = Time.zone.now.end_of_year
18
+ elsif value == "last_week"
19
+ a = (Time.zone.now - 1.week).beginning_of_week
20
+ b = (Time.zone.now - 1.week).end_of_week
21
+ elsif value == "last_month"
22
+ a = (Time.zone.now - 1.month).beginning_of_month
23
+ b = (Time.zone.now - 1.month).end_of_month
24
+ elsif value == "last_year"
25
+ a = (Time.zone.now - 1.year).beginning_of_year
26
+ b = (Time.zone.now - 1.year).end_of_year
27
+ else
28
+ return query
29
+ end
30
+
31
+ criteria = "#{query.model.table_name}.#{key}"
32
+
33
+ query
34
+ .where("#{criteria} >= ?", a.to_date)
35
+ .where("#{criteria} <= ?", b.to_date)
36
+ end
37
+ end
@@ -52,10 +52,16 @@ module Dorsale::FiltersHelper
52
52
 
53
53
  def dorsale_time_periods_for_select
54
54
  {
55
- t("time_periods.all_time") => "",
56
- t("time_periods.today") => "today",
57
- t("time_periods.week") => "week" ,
58
- t("time_periods.month") => "month",
55
+ t("time_periods.all_time") => "",
56
+ t("time_periods.today") => "today",
57
+ t("time_periods.yesterday") => "yesterday" ,
58
+ t("time_periods.this_week") => "this_week",
59
+ t("time_periods.last_week") => "last_week",
60
+ t("time_periods.this_month") => "this_month",
61
+ t("time_periods.last_month") => "last_month",
62
+ t("time_periods.this_year") => "this_year",
63
+ t("time_periods.last_year") => "last_year",
64
+ t("time_periods.custom_date") => "custom_date",
59
65
  }
60
66
  end
61
67
 
@@ -12,7 +12,7 @@ module Dorsale::Users::Avatar
12
12
  end
13
13
 
14
14
  def gravatar_url
15
- "https://www.gravatar.com/avatar/" + Digest::MD5.hexdigest(email) + "?default=mm&size=200"
15
+ "https://www.gravatar.com/avatar/" + Digest::MD5.hexdigest(email.to_s) + "?default=mm&size=200"
16
16
  end
17
17
  end
18
18
  end
@@ -9,6 +9,9 @@
9
9
  :include_blank => false,
10
10
  )
11
11
 
12
+ = f.input :bm_date_begin, input_html: {placeholder: t("filters.date_begin")}
13
+ = f.input :bm_date_end, input_html: {placeholder: t("filters.date_end")}
14
+
12
15
  = f.input(:bm_payment_status,
13
16
  :collection => billing_machine_payment_status_for_filter_select,
14
17
  :include_blank => false,
@@ -9,6 +9,9 @@
9
9
  :include_blank => false,
10
10
  )
11
11
 
12
+ = f.input :bm_date_begin, input_html: {placeholder: t("filters.date_begin")}
13
+ = f.input :bm_date_end, input_html: {placeholder: t("filters.date_end")}
14
+
12
15
  = f.input(:bm_quotation_state,
13
16
  :collection => billing_machine_quotation_states_for_filter_select,
14
17
  :include_blank => false,
@@ -161,18 +161,24 @@ en:
161
161
 
162
162
  filters:
163
163
  all_customers: "All customers"
164
+ date_begin: "Date begin"
165
+ date_end: "Date end"
164
166
 
165
167
  time_periods:
166
168
  all_time: "All time"
169
+ tomorrow: "Tomorrow"
167
170
  today: "Today"
168
- week: "This week"
169
- month: "This month"
170
- year: "This year"
171
+ yesterday: "Yesterday"
172
+ this_week: "This semaine"
173
+ this_month: "This mois"
174
+ this_year: "This année"
175
+ last_week: "Last week"
176
+ last_month: "Last month"
177
+ last_year: "Last year"
171
178
  delayed: "Delayed"
172
- this_week: "This week"
173
179
  next_week: "Next week"
174
180
  next_next_week: "In two weeks"
175
-
181
+ custom_date: "Custom date"
176
182
 
177
183
  labels:
178
184
  <<: *attributes
@@ -181,18 +181,24 @@ fr:
181
181
 
182
182
  filters:
183
183
  all_customers: "Tous les clients"
184
+ date_begin: "Date début"
185
+ date_end: "Date fin"
184
186
 
185
187
  time_periods:
186
188
  all_time: "Depuis toujours"
187
- today: "Aujourd'hui"
188
189
  tomorrow: "Demain"
189
- week: "Cette semaine"
190
- month: "Ce mois"
191
- year: "Cette année"
192
- delayed: "En retard"
190
+ today: "Aujourd'hui"
191
+ yesterday: "Hier"
193
192
  this_week: "Cette semaine"
193
+ this_month: "Ce mois"
194
+ this_year: "Cette année"
195
+ last_week: "La semaine dernière"
196
+ last_month: "Le mois dernier"
197
+ last_year: "L'année dernière"
198
+ delayed: "En retard"
194
199
  next_week: "La semaine prochaine"
195
200
  next_next_week: "Dans deux semaines"
201
+ custom_date: "Choisir une date"
196
202
 
197
203
  labels:
198
204
  <<: *attributes
@@ -179,6 +179,22 @@ Feature: Invoice Management
179
179
  When he filters by date on today
180
180
  Then only the invoices of today do appear
181
181
 
182
+ Scenario: Filter by custom dates
183
+ Given a bunch of existing invoices
184
+ When the user goes to the invoices page
185
+ Then he do not see the "bm_date_begin" filter
186
+ Then he do not see the "bm_date_end" filter
187
+ When he select custom date filter
188
+ Then he see the "bm_date_begin" filter
189
+ Then he see the "bm_date_end" filter
190
+ When he filters invoices between two date
191
+ Then only the invoices of today do appear
192
+ Then he see the "bm_date_begin" filter
193
+ Then he see the "bm_date_end" filter
194
+ When he reset filters
195
+ Then he do not see the "bm_date_begin" filter
196
+ Then he do not see the "bm_date_end" filter
197
+
182
198
  Scenario: Filter by status
183
199
  Given a bunch of existing invoices
184
200
  When the user goes to the invoices page
@@ -230,7 +246,6 @@ Feature: Invoice Management
230
246
  Given an existing customer
231
247
  Given an existing invoice
232
248
  When the user download the pdf
233
- Then the PDF should have the filename "Facture_2014-01_SN.pdf"
234
249
 
235
250
  Scenario: Invoices data
236
251
  Given existing "100" invoices with "123" amount
@@ -105,6 +105,8 @@ When(/^wants to copy it$/) do
105
105
  end
106
106
 
107
107
  When(/^he fills a line with "(.*?)", "(.*?)", "(.*?)", "(.*?)"$/) do |label, quantity, unit, unit_price|
108
+ expect(page).to have_selector(".line")
109
+
108
110
  within all('.line').last do
109
111
  find(".line-label textarea").set label
110
112
  find(".line-quantity input").set quantity
@@ -334,10 +336,6 @@ Then(/^the invoice status should be "(.*?)"$/) do |color|
334
336
  expect(find(".invoice")[:class]).to include(color)
335
337
  end
336
338
 
337
- Then(/^the PDF should have the filename "([^\"]*)"$/) do |filename|
338
- expect(page.response_headers['Content-Disposition']).to include("filename=\"#{filename}\"")
339
- end
340
-
341
339
  Then(/^data total amount is "(.*?)"$/) do |text|
342
340
  expect(page).to have_content text
343
341
  end
@@ -363,3 +361,9 @@ Then(/^an invoice is sent to customer$/) do
363
361
  expect(email.parts.first.body).to eq "def"
364
362
  expect(email.attachments.count).to eq 1
365
363
  end
364
+
365
+ When(/^he filters invoices between two date$/) do
366
+ fill_in :filters_bm_date_begin, with: I18n.l(Time.zone.now.to_date)
367
+ fill_in :filters_bm_date_end, with: I18n.l(Time.zone.now.to_date)
368
+ find(".filter-submit").click
369
+ end
@@ -144,7 +144,7 @@ end
144
144
  When(/^he create an invoice from the quotation$/) do
145
145
  @invoices_count = Dorsale::BillingMachine::Invoice.count
146
146
  find("[href$='create_invoice']").click
147
- find("[type=submit]").click
147
+ find("form#new_invoice [type=submit]").click
148
148
  end
149
149
 
150
150
  When(/^he fill the quotation expiry$/) do
@@ -42,3 +42,14 @@ Then(/^the selected filter is "(.*?)"$/) do |value|
42
42
  expect(selected_values).to include value
43
43
  end
44
44
 
45
+ Then(/^he do not see the "([^"]*)" filter$/) do |id|
46
+ expect(page).to have_no_selector("#filters_#{id}")
47
+ end
48
+
49
+ When(/^he select custom date filter$/) do
50
+ select "Choisir une date"
51
+ end
52
+
53
+ Then(/^he see the "([^"]*)" filter$/) do |id|
54
+ expect(page).to have_selector("#filters_#{id}")
55
+ end
@@ -118,6 +118,7 @@ When(/^I copy the expense$/) do
118
118
  @expenses_count = Dorsale::ExpenseGun::Expense.count
119
119
 
120
120
  find("[href$=copy]").click
121
+ expect(page).to have_selector("form#new_expense [type=submit]")
121
122
 
122
123
  all(".nested-fields").each do |line|
123
124
  within line do
@@ -125,7 +126,7 @@ When(/^I copy the expense$/) do
125
126
  end
126
127
  end
127
128
 
128
- find("[type=submit]").click
129
+ find("form#new_expense [type=submit]").click
129
130
  end
130
131
 
131
132
  Then(/^an expense copy is created$/) do
@@ -64,7 +64,7 @@ end
64
64
 
65
65
  When(/^I create a task$/) do
66
66
  all("a[href*='tasks/new']").first.click
67
- find("[type=submit]").click # First submit to see errors
67
+ find("form[id*=task] [type=submit]").click # First submit to see errors
68
68
  fill_in "task_name", with: "I-am-the-task-title"
69
69
  fill_in "task_description", with: "I-am-the-task-description"
70
70
  select @user.name
@@ -116,7 +116,7 @@ When(/^I filter tasks by undone$/) do
116
116
  find(".filters [type=submit]:last-child").click
117
117
  end
118
118
 
119
- When(/^I reset filters$/) do
119
+ When(/^(?:I|he|she) reset filters$/) do
120
120
  find(".filters .reset").click
121
121
  end
122
122
 
@@ -164,18 +164,15 @@ Then(/^the task is snoozed$/) do
164
164
  end
165
165
 
166
166
  Then(/^I download PDF file$/) do
167
- expect(page.status_code).to eq 200
168
- expect(page.response_headers['Content-Type']).to match "application/pdf"
167
+ # Nothing to do, Rails raise if any problem
169
168
  end
170
169
 
171
170
  Then(/^I download CSV file$/) do
172
- expect(page.status_code).to eq 200
173
- expect(page.response_headers['Content-Type']).to match "text/csv"
171
+ # Nothing to do, Rails raise if any problem
174
172
  end
175
173
 
176
174
  Then(/^I download XLS file$/) do
177
- expect(page.status_code).to eq 200
178
- expect(page.response_headers['Content-Type']).to match "excel"
175
+ # Nothing to do, Rails raise if any problem
179
176
  end
180
177
 
181
178
  Then(/^I am on this task$/) do
@@ -1,6 +1,6 @@
1
1
  module CucumberWaitAjaxRequests
2
- def wait_ajax_requests
3
- Timeout.timeout(Capybara.default_max_wait_time) do
2
+ def wait_ajax_requests(timeout = Capybara.default_max_wait_time)
3
+ Timeout.timeout(timeout) do
4
4
  sleep 0.1 until all_ajax_requests_finished?
5
5
  end
6
6
  end
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  World(CucumberWaitAjaxRequests)
14
14
 
15
- # Auto wait ajax requests between steps
15
+ # Auto wait ajax request between steps
16
16
  AfterStep do |scenario|
17
17
  if page.evaluate_script('typeof jQuery') != "undefined"
18
18
  wait_ajax_requests
@@ -1,6 +1,6 @@
1
1
  require "capybara/poltergeist"
2
2
 
3
- phantomjs_version = "1.9.8"
3
+ phantomjs_version = "2.1.1"
4
4
  phantomjs_binary = `which phantomjs-#{phantomjs_version} phantomjs`.split("\n").first
5
5
  raise "invalid phantomjs version" unless `#{phantomjs_binary} -v`.strip == phantomjs_version
6
6
  # You can download phantomjs here : https://bitbucket.org/ariya/phantomjs/downloads/
@@ -1,12 +1,12 @@
1
1
  module CucumberWaitTurbolinksRequests
2
- def wait_turbolinks_requests
3
- Timeout.timeout(Capybara.default_max_wait_time) do
2
+ def wait_turbolinks_requests(timeout = Capybara.default_max_wait_time)
3
+ Timeout.timeout(timeout) do
4
4
  sleep 0.1 until all_turbolinks_requests_finished?
5
5
  end
6
6
  end
7
7
 
8
8
  def all_turbolinks_requests_finished?
9
- have_selector("body.turbolinks-load")
9
+ have_no_selector("html.turbolinks-load")
10
10
  end
11
11
  end
12
12
 
@@ -17,11 +17,11 @@ AfterStep do |scenario|
17
17
  if page.evaluate_script('typeof Turbolinks') != "undefined"
18
18
  evaluate_script %(
19
19
  $(document).on("turbolinks:before-visit", function(){
20
- $("body").addClass("turbolinks-load")
20
+ $("html").addClass("turbolinks-load")
21
21
  })
22
22
 
23
23
  $(document).on("turbolinks:load", function(){
24
- $("body").removeClass("turbolinks-load")
24
+ $("html").removeClass("turbolinks-load")
25
25
  })
26
26
  )
27
27
 
@@ -1,3 +1,3 @@
1
1
  module Dorsale
2
- VERSION = "3.1.5"
2
+ VERSION = "3.1.6"
3
3
  end
@@ -15,6 +15,100 @@ describe Dorsale::BillingMachine::InvoicesController, type: :controller do
15
15
  expect(response).to be_ok
16
16
  expect(response.body.split("\n").length).to eq 4 # headers + 3 invoices
17
17
  end
18
- end
18
+ end # describe "CSV export"
19
+
20
+ describe "filters" do
21
+ before do
22
+ Timecop.freeze "2016-11-08 12:00:00"
23
+ @today = create(:billing_machine_invoice, date: "2016-11-08")
24
+ @yesterday = create(:billing_machine_invoice, date: "2016-11-07")
25
+ @tomorrow = create(:billing_machine_invoice, date: "2016-11-09")
26
+ @last_week = create(:billing_machine_invoice, date: "2016-11-04")
27
+ @last_month = create(:billing_machine_invoice, date: "2016-10-18")
28
+ @last_year = create(:billing_machine_invoice, date: "2015-10-18")
29
+ end
30
+
31
+ def filter(period)
32
+ cookies[:filters] = {"bm_time_period" => period.to_s}.to_json
33
+ get :index
34
+ end
35
+
36
+ it "should filter by all_time" do
37
+ filter :all_time
38
+ expect(assigns :invoices).to contain_exactly(
39
+ @today,
40
+ @yesterday,
41
+ @tomorrow,
42
+ @last_week,
43
+ @last_month,
44
+ @last_year,
45
+ )
46
+ end
47
+
48
+ it "should filter by today" do
49
+ filter :today
50
+ expect(assigns :invoices).to contain_exactly(
51
+ @today,
52
+ )
53
+ end
54
+
55
+ it "should filter by yesterday" do
56
+ filter :yesterday
57
+ expect(assigns :invoices).to contain_exactly(
58
+ @yesterday,
59
+ )
60
+ end
61
+
62
+ it "should filter by this_week" do
63
+ filter :this_week
64
+ expect(assigns :invoices).to contain_exactly(
65
+ @today,
66
+ @yesterday,
67
+ @tomorrow,
68
+ )
69
+ end
70
+
71
+ it "should filter by this_month" do
72
+ filter :this_month
73
+ expect(assigns :invoices).to contain_exactly(
74
+ @today,
75
+ @yesterday,
76
+ @tomorrow,
77
+ @last_week,
78
+ )
79
+ end
80
+
81
+ it "should filter by this_year" do
82
+ filter :this_year
83
+ expect(assigns :invoices).to contain_exactly(
84
+ @today,
85
+ @yesterday,
86
+ @tomorrow,
87
+ @last_week,
88
+ @last_month,
89
+ )
90
+ end
91
+
92
+ it "should filter by last_week" do
93
+ filter :last_week
94
+ expect(assigns :invoices).to contain_exactly(
95
+ @last_week,
96
+ )
97
+ end
98
+
99
+ it "should filter by last_month" do
100
+ filter :last_month
101
+ expect(assigns :invoices).to contain_exactly(
102
+ @last_month,
103
+ )
104
+ end
105
+
106
+ it "should filter by last_year" do
107
+ filter :last_year
108
+ expect(assigns :invoices).to contain_exactly(
109
+ @last_year,
110
+ )
111
+ end
112
+ end # describe "filters"
19
113
 
20
114
  end
@@ -50,11 +50,18 @@ RSpec.describe User, type: :model do
50
50
  it "avatar_url should return local_avatar_url if present" do
51
51
  expect(@user.avatar_url).to include "avatar.png"
52
52
  end
53
+
53
54
  it "avatar_url should return gravatar_url if no local avatar" do
54
55
  @user.remove_avatar!
55
56
  @user.save!
56
57
  expect(@user.avatar_url).to include "gravatar"
57
58
  end
59
+
60
+ it "should work if email is nil" do
61
+ @user.remove_avatar!
62
+ allow(@user).to receive(:email)
63
+ expect(@user.avatar_url).to be_present
64
+ end
58
65
  end
59
66
 
60
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorsale
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.5
4
+ version: 3.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - agilidée
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-13 00:00:00.000000000 Z
11
+ date: 2016-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -530,7 +530,6 @@ files:
530
530
  - app/filters/dorsale/billing_machine/small_data/filter_strategy_by_customer.rb
531
531
  - app/filters/dorsale/billing_machine/small_data/filter_strategy_by_payment_status.rb
532
532
  - app/filters/dorsale/billing_machine/small_data/filter_strategy_by_state.rb
533
- - app/filters/dorsale/billing_machine/small_data/filter_strategy_by_time_period.rb
534
533
  - app/filters/dorsale/customer_vault/small_data/filter_for_people.rb
535
534
  - app/filters/dorsale/expense_gun/small_data/filter_for_expenses.rb
536
535
  - app/filters/dorsale/flyboy/small_data/filter_for_folders.rb
@@ -544,6 +543,7 @@ files:
544
543
  - app/filters/dorsale/small_data/filter_strategy_by_date_end.rb
545
544
  - app/filters/dorsale/small_data/filter_strategy_by_key_value.rb
546
545
  - app/filters/dorsale/small_data/filter_strategy_by_tags.rb
546
+ - app/filters/dorsale/small_data/filter_strategy_by_time_period.rb
547
547
  - app/helpers/dh.rb
548
548
  - app/helpers/dorsale/alexandrie/attachments_helper.rb
549
549
  - app/helpers/dorsale/all_helpers.rb
@@ -1,15 +0,0 @@
1
- class Dorsale::BillingMachine::SmallData::FilterStrategyByTimePeriod < ::Dorsale::SmallData::FilterStrategyByKeyValue
2
- def apply(query, value)
3
- criteria = "#{query.model.table_name}.#{key}"
4
-
5
- if value == "today"
6
- return query.where("#{criteria} >= ?", Time.zone.now.to_date)
7
- elsif value == "week"
8
- return query.where("#{criteria} >= ?", Time.zone.now.to_date.at_beginning_of_week)
9
- elsif value == "month"
10
- return query.where("#{criteria} >= ?", Time.zone.now.to_date.at_beginning_of_month)
11
- else
12
- return query
13
- end
14
- end
15
- end