backlog 0.10.2 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,25 @@
1
- == 0.10.2 2007-09-24
2
-
3
- === Features
4
-
5
- === Fixes
1
+ == 0.10.3 2007-09-24
2
+
3
+ * Removed "Active Sprint" from Group edit view, when there is no active sprint.
4
+ * Made "Home" link correct when running in application server with JRuby.
5
+ * Made notices and messages a bit prettier and easier to read.
6
+ * Added link to create new group in the "New sprint" view.
7
+ * Fixed link to party from task edit view. Got broken when reverting from EdgeRails.
8
+ * Changed default database.yml to work in Aptana RadRails.
9
+ * Removed Datek specific info from environment files.
10
+ * Changed to raise mail delivery failures to help user choose valid email address.
11
+ * Changed expiry of login token from 1 day to 1 year to enable cookie login.
12
+ * Fixed indentation for subtasks in task lists.
13
+ * Changed to allow revising estimates for tasks in future sprints.
14
+ * Fixed bug in ordering of subtasks.
15
+ * Fixed bug in task ordering in backlog view.
16
+
17
+ == 0.10.2 2007-09-23
6
18
 
7
19
  * Removed version from name of released WAR file to enable easier replacement in Tomcat.
8
20
  * Fixed bug when starting work on a task.
9
21
 
10
- == 0.10.1 2007-09-23
11
-
12
- === Features
13
-
14
- === Fixes
22
+ == 0.10.1 2007-09-22
15
23
 
16
24
  * Fixed bug in "remember me" login when running with JRuby
17
25
  * Fixed bug when moving a task to next sprint on mysql
@@ -44,8 +52,6 @@
44
52
 
45
53
  == 0.9.1 2007-09-09
46
54
 
47
- === Fixes
48
-
49
55
  * Fixed loading of database config in production environment.
50
56
  * Fixed misaligned columns in weekly work sheet when invoicing is disabled.
51
57
  * Added "Back" link from Show Backlog view.
@@ -38,6 +38,11 @@ class BacklogsController < ApplicationController
38
38
  @completed_tasks = @backlog.tasks.select {|t| t.finished_at}.sort {|t1, t2| t2.finished_at <=> t1.finished_at}
39
39
  end
40
40
 
41
+ def show_no_layout
42
+ show
43
+ render :partial => 'tasks'
44
+ end
45
+
41
46
  def new
42
47
  @backlog = Backlog.new
43
48
  end
@@ -78,7 +78,8 @@ class TasksController < ApplicationController
78
78
  if @task.period_id != nil
79
79
  @task.remove_from_list
80
80
  @task.period = nil
81
- new_pos = @task.backlog.tasks.count(:conditions => 'period_id IS NULL') + 1
81
+ new_pos = @task.backlog.tasks.count(:conditions => 'period_id IS NULL AND parent_id IS NULL') + 1
82
+ params[:task].delete(:period_id)
82
83
  params[:task][:position] = new_pos
83
84
  end
84
85
  end
@@ -162,7 +163,6 @@ class TasksController < ApplicationController
162
163
  task.period_id = params[:period_id]
163
164
  end
164
165
  task.insert_at params[:position]
165
- task.save!
166
166
  back_or_redirect_to :controller => 'periods', :action => :show_no_layout, :id => task.period, :task => task.id
167
167
  end
168
168
 
@@ -17,7 +17,7 @@ class Party < ActiveRecord::Base
17
17
  completed_periods = periods.select {|p| p.end_on < Date.today}
18
18
  if last_completed = completed_periods.last
19
19
  last_completed.speed
20
- elsif active_period = periods.find {|p| p.active?}
20
+ elsif active_period = periods.to_ary.find {|p| p.active?}
21
21
  active_period.speed
22
22
  else
23
23
  0
@@ -15,7 +15,7 @@ class Task < ActiveRecord::Base
15
15
  has_many :works, :order => 'completed_at', :dependent => :destroy
16
16
  has_many :task_files, :dependent => :destroy
17
17
 
18
- acts_as_list :scope => '#{period_id ? "period_id = #{period_id}" : parent_id.nil? ? "period_id IS NULL AND backlog_id = #{backlog_id}" : "parent_id = #{parent_id}"} AND finished_at IS NULL'
18
+ acts_as_list :scope => '#{parent_id ? "parent_id = #{parent_id}" : period_id ? "period_id = #{period_id}" : "period_id IS NULL AND parent_id IS NULL AND backlog_id = #{backlog_id}"} AND finished_at IS NULL'
19
19
  acts_as_tree :order => 'position'
20
20
 
21
21
  validates_presence_of :backlog_id, :if => Proc.new { |task| task.parent_id.nil? }
@@ -30,8 +30,9 @@ class Task < ActiveRecord::Base
30
30
 
31
31
  #validates_uniqueness_of :description, :scope => :backlog_id, :if => Proc.new {|task| task.backlog_id && task.previous_task_id.nil?}
32
32
  validates_uniqueness_of :description, :scope => :period_id, :if => :period_id
33
+ validates_uniqueness_of :position, :scope => :parent_id, :if => :parent_id, :allow_nil => true
33
34
  validates_uniqueness_of :position, :scope => :period_id, :if => :period_id, :allow_nil => true
34
- validates_uniqueness_of :position, :scope => [:period_id, :backlog_id], :if => Proc.new {|task| task.period_id.nil?}, :allow_nil => true
35
+ validates_uniqueness_of :position, :scope => [:period_id, :parent_id, :backlog_id], :if => Proc.new {|task| task.period_id.nil? && task.parent_id.nil?}, :allow_nil => true
35
36
 
36
37
  def validate
37
38
  if self.parent_id && (self.period_id || self.backlog_id)
@@ -68,11 +68,15 @@ class User < Party
68
68
  end
69
69
 
70
70
  def token_expired?
71
- self.security_token and self.token_expiry and (Clock.now > self.token_expiry)
71
+ self.security_token.nil? or self.token_expiry.nil? or (Clock.now > self.token_expiry)
72
+ end
73
+
74
+ def token_stale?
75
+ token_expired? or Clock.now.to_i >= (self.token_expiry.to_i - self.class.token_lifetime / 2)
72
76
  end
73
77
 
74
78
  def generate_security_token
75
- if self.security_token.nil? or self.token_expiry.nil? or (Clock.now.to_i + token_lifetime / 2) >= self.token_expiry.to_i
79
+ if token_stale?
76
80
  token = new_security_token
77
81
  return token
78
82
  else
@@ -86,7 +90,7 @@ class User < Party
86
90
  @password_needs_confirmation = true
87
91
  end
88
92
 
89
- def token_lifetime
93
+ def self.token_lifetime
90
94
  UserSystem::CONFIG[:security_token_life_hours] * 60 * 60
91
95
  end
92
96
 
@@ -119,7 +123,7 @@ class User < Party
119
123
  end
120
124
 
121
125
  def new_security_token
122
- expiry = Time.at(Clock.now.to_i + token_lifetime)
126
+ expiry = Time.at(Clock.now.to_i + self.class.token_lifetime)
123
127
  write_attribute('security_token', self.class.hashed(self.salted_password + Clock.now.to_i.to_s + rand.to_s))
124
128
  write_attribute('token_expiry', expiry)
125
129
  # update_without_callbacks
@@ -45,6 +45,7 @@
45
45
 
46
46
  </div>
47
47
 
48
+ <% if @group.periods.last %>
48
49
  <div id="rfeature">
49
50
  <div class="btitle">
50
51
  <h4><%=l :active %> <%=l :period %></h4>
@@ -52,4 +53,4 @@
52
53
 
53
54
  <%=link_to image_tag(url_for(:controller => 'parties', :action => :burn_down_chart_thumbnail, :format => 'png', :id => @group.id)), :controller => 'parties', :action => :burn_down_chart, :format => :png, :id => @group%>
54
55
  </div>
55
-
56
+ <% end %>
@@ -1,7 +1,7 @@
1
1
  <div id="navbar">
2
2
  <span style="float: left"><%=link_to "#{l :backlog} #{APP::VERSION}", 'http://rubyforge.org/projects/backlog'%></span>
3
3
  <span style="float: left"><form action="<%=url_for :controller => 'search', :action => :results%>"><%=text_field_tag :q, @search || l(:search), :onfocus => "if (value == '#{l(:search)}') value='' "%><%=submit_tag :search, :style => 'display: none'%></form></span>
4
- <%= link_to l(:home), '/' %>
4
+ <%= link_to l(:home), url_for(:controller => 'backlogs') %>
5
5
 
6
6
  <% if user? %>
7
7
  | <%= link_to l(:backlogs), :controller => 'backlogs', :action => :list %>
@@ -13,23 +13,11 @@
13
13
  <% if user? %>| <%=link_to user.email, :controller => 'user', :action => :edit%><% end %>
14
14
  </div>
15
15
  <div id="header">
16
- <% if flash[:notice] %>
16
+ <% if flash[:notice] || flash['notice'] || flash[:message] || flash['message'] %>
17
17
  <div id="notice">
18
18
  <%=flash[:notice]%>
19
- </div>
20
- <% end %>
21
- <% if flash['notice'] %>
22
- <div id="notice">
23
19
  <%=flash['notice']%>
24
- </div>
25
- <% end %>
26
- <% if flash[:notice] %>
27
- <div id="message">
28
20
  <%=flash[:message]%>
29
- </div>
30
- <% end %>
31
- <% if flash['message'] %>
32
- <div id="message">
33
21
  <%=flash['message']%>
34
22
  </div>
35
23
  <% end %>
@@ -12,6 +12,7 @@
12
12
  <% if @period.party %>
13
13
  <%=image_detour_to(@period.party.icon, "#{l(@period.party.to_sym)} #{@period.party.name}", :controller => @period.party.controller, :action => :edit, :id => @period.party) %>
14
14
  <% end %>
15
+ <%=detour_to l(:new_group), :controller => 'groups', :action => :new %>
15
16
  </p>
16
17
 
17
18
  <% if @period.party %>
@@ -17,7 +17,7 @@
17
17
  <p><label for="task_period_id"><%=l :period%></label><br/>
18
18
  <%= select 'task', 'period_id', [['', '']] + @periods.map{|p| [p.name, p.id]}, {},
19
19
  :onchange => remote_function(:update => 'period_link',
20
- :url => { :controller => 'periods', :action => 'make_link', :id => "'+value+'" }) %>
20
+ :url => { :controller => 'periods', :action => 'make_link', :id => "'+value+'", :escape => false }) %>
21
21
  <span id="period_link">
22
22
  <%=render :partial => '/periods/link', :locals => {:period => @task.period}%>
23
23
  </span>
@@ -8,8 +8,8 @@
8
8
  <% end %>
9
9
  </td>
10
10
  <td align="left" valign="top" width="1" nowrap="true">
11
- <%=detour_to @task.position.to_s, :controller => 'tasks', :action => :edit, :id => @task.id if @task.position || @task.depth == 0 %>
12
11
  <%= ("&nbsp;" * @task.depth * 4) if @task.depth > 0 %>
12
+ <%=detour_to @task.position.to_s, :controller => 'tasks', :action => :edit, :id => @task.id if @task.position || @task.depth == 0 %>
13
13
  <%= resolution_image(@task.resolution) if @task.finished_at %>
14
14
  <%= "-" if @task.children.size > 0 %>
15
15
  </td>
@@ -63,7 +63,7 @@
63
63
  <% form_tag({:controller => 'estimates', :action => 'create', :id => @task}) do %>
64
64
  <%= submit_tag('checkmark', :value => l(:save), :style => 'display: none')%>
65
65
  <% if @task.track_todo? %>
66
- <% if @task.period.nil? || @task.period.active? %>
66
+ <% if @task.period.nil? || @task.period.active_or_future? %>
67
67
  <%= text_field 'estimate', 'todo', :tabindex => i+2, :id => "#{@task.id}_todo", :value => @task.todo, :class => :task_hours, :maxlength => 4, :onkeypress => "handleEvent(this, event, #{@task.id})" %>
68
68
  <% else %>
69
69
  <%= @task.todo %>
@@ -92,8 +92,8 @@
92
92
  </tr>
93
93
 
94
94
  <% if active && (@task.period.nil? || @task.period.active_or_future?) %>
95
- <%= draggable_element "task_#{@task.id}", :revert => true %>
96
- <%= drop_receiving_element "task_#{@task.id}",
95
+ <%=draggable_element "task_#{@task.id}" %>
96
+ <%=drop_receiving_element "task_#{@task.id}",
97
97
  :update => update, :url => with_detour({:controller => 'tasks', :action => "move_to", :period_id => @task.period_id, :position => @task.position, :layout => false}),
98
98
  :accept => "tasks",
99
99
  :loading => "",
@@ -103,6 +103,6 @@
103
103
  <% end %>
104
104
 
105
105
  <% for subtask in task.children %>
106
- <%=render :partial => '/tasks/task', :locals => { :task => subtask, :i => i, :active => active } if (active && subtask.active?) || (!active && subtask.completed?) %>
106
+ <%=render :partial => '/tasks/task', :locals => { :task => subtask, :i => i, :active => active, :highlight_task => subtask == @selected_task, :update => update } if (active && subtask.active?) || (!active && subtask.completed?) %>
107
107
  <% i += 1 %>
108
108
  <% end %>
@@ -1,44 +1,44 @@
1
1
  development:
2
- <% if RUBY_PLATFORM =~ /java/ %>
2
+ #<% if RUBY_PLATFORM =~ /java/ %>
3
3
  adapter: jdbc
4
4
  driver: org.postgresql.Driver
5
5
  url: jdbc:postgresql://localhost:5432/backlog_development
6
6
  database: backlog_development
7
7
  username: root
8
8
  host: localhost
9
- <% else %>
9
+ #<% else %>
10
10
  adapter: postgresql
11
11
  database: backlog_development
12
12
  username: root
13
13
  host: localhost
14
- <% end %>
14
+ #<% end %>
15
15
 
16
16
  # Warning: The database defined as 'test' will be erased and
17
17
  # re-generated from your development database when you run 'rake'.
18
18
  # Do not set this db to the same as development or production.
19
19
  test:
20
- <% if RUBY_PLATFORM =~ /java/ %>
20
+ #<% if RUBY_PLATFORM =~ /java/ %>
21
21
  adapter: jdbc
22
22
  driver: org.postgresql.Driver
23
23
  url: jdbc:postgresql://localhost:5432/backlog_test
24
24
  database: backlog_test
25
25
  username: root
26
26
  host: localhost
27
- <% else %>
27
+ #<% else %>
28
28
  adapter: postgresql
29
29
  database: backlog_test
30
- <% end %>
30
+ #<% end %>
31
31
 
32
32
  production:
33
- <% if RUBY_PLATFORM =~ /java/ %>
33
+ #<% if RUBY_PLATFORM =~ /java/ %>
34
34
  adapter: jdbc
35
35
  driver: org.postgresql.Driver
36
36
  url: jdbc:postgresql://localhost:5432/backlog_production
37
37
  username: root
38
38
  host: localhost
39
- <% else %>
39
+ #<% else %>
40
40
  adapter: postgresql
41
41
  database: backlog_production
42
42
  username: root
43
43
  host: localhost
44
- <% end %>
44
+ #<% end %>
@@ -18,9 +18,10 @@ config.action_view.debug_rjs = true
18
18
  config.action_mailer.raise_delivery_errors = true
19
19
 
20
20
  ActionMailer::Base.delivery_method = :sendmail
21
+
21
22
  #ActionMailer::Base.delivery_method = :smtp
22
- #
23
23
  #ActionMailer::Base.smtp_settings = {
24
- # :address => "mail.datek.no",
25
- # :port => 25
24
+ # :address => "localhost",
25
+ # :port => 25,
26
+ # :domain => 'localdomain'
26
27
  #}
@@ -15,6 +15,15 @@ config.action_controller.perform_caching = true
15
15
  # config.action_controller.asset_host = "http://assets.example.com"
16
16
 
17
17
  # Disable delivery errors if you bad email addresses should just be ignored
18
- config.action_mailer.raise_delivery_errors = false
18
+ config.action_mailer.raise_delivery_errors = true
19
19
 
20
+ puts "Using sendmail to send mail"
20
21
  ActionMailer::Base.delivery_method = :sendmail
22
+
23
+ #puts "Using sendmail to send mail"
24
+ #ActionMailer::Base.delivery_method = :smtp
25
+ #ActionMailer::Base.smtp_settings = {
26
+ # :address => "localhost",
27
+ # :port => 25,
28
+ # :domain => 'localdomain'
29
+ #}
@@ -1,13 +1,13 @@
1
1
  module UserSystem
2
2
  CONFIG = {
3
3
  # Source address for user emails
4
- :email_from => 'backlog@datek.no',
4
+ :email_from => 'backlog@backlog.rubyforge.org',
5
5
 
6
6
  # Destination email for system errors
7
- :admin_email => 'uwe@datek.no',
7
+ :admin_email => 'backlog@backlog.rubyforge.org',
8
8
 
9
9
  # Sent in emails to users
10
- :app_url => 'http://sandra:3000/',
10
+ :app_url => 'http://backlog.rubyforge.org/',
11
11
 
12
12
  # Sent in emails to users
13
13
  :app_name => 'Backlog',
@@ -16,6 +16,6 @@ module UserSystem
16
16
  :mail_charset => 'utf-8',
17
17
 
18
18
  # Security token lifetime in hours
19
- :security_token_life_hours => 24,
19
+ :security_token_life_hours => 24 * 365,
20
20
  }
21
21
  end
@@ -1,14 +1,16 @@
1
1
  module UrlForFix
2
2
  # TODO (uwe): Can be removed when using EdgeRails of Rails >= 1.3
3
3
  def url_for(org_options = {}, *parameters_for_method_reference)
4
- return super(org_options, *parameters_for_method_reference) if org_options.is_a? String
4
+ return super(org_options, *parameters_for_method_reference) if org_options.nil? || org_options.is_a?(String)
5
5
  new_options = {}
6
6
  org_options.each do |param, value|
7
7
  add_option(new_options, param, value)
8
8
  end
9
- super new_options, *parameters_for_method_reference
9
+ url = super new_options, *parameters_for_method_reference
10
+ url = CGI::unescape(url) if url && org_options[:escape] == false
11
+ url
10
12
  end
11
-
13
+
12
14
  # Used with AplicationHelper::url_for
13
15
  def add_option(options, param, value)
14
16
  case value
@@ -1,65 +1,71 @@
1
- first:
2
- id: 1
3
- created_at: 2007-06-11
4
- backlog_id: 1
5
- period_id: 2
6
- description: first task
7
- position: 1
8
- another:
9
- id: 2
10
- created_at: 2007-06-12
11
- backlog_id: 1
12
- period_id: 3
13
- description: second task
14
- position: 1
15
- postponed:
16
- id: 3
17
- created_at: 2007-06-12
18
- backlog_id: 1
19
- period_id: 3
20
- description: postponed task
21
- finished_at: 2007-08-02 14:15:42
22
- resolution: POSTPONED
23
- started:
24
- id: 4
25
- created_at: 2007-08-02 14:15:42
26
- backlog_id: 2
27
- period_id: 3
28
- description: third task
29
- position: 2
30
- in_last_period:
31
- id: 5
32
- created_at: 2007-08-02 14:15:42
33
- backlog_id: 1
34
- period_id: 4
35
- description: task in last period
36
- initial_estimate: 1.0
37
- position: 1
38
- previous_task_id: 3
39
- not_planned:
40
- id: 6
41
- created_at: 2007-08-02 14:15:42
42
- backlog_id: 1
43
- description: unplanned task
44
- position: 1
45
- supertask:
46
- id: 7
47
- created_at: 2007-06-12
48
- backlog_id: 1
49
- period_id: 3
50
- description: super task
51
- position: 3
52
- subtask:
53
- id: 8
54
- created_at: 2007-06-12
55
- parent_id: 7
56
- description: sub task
57
- position: 1
58
- in_ancient:
59
- id: 9
60
- created_at: 2007-06-03
61
- backlog_id: 1
62
- period_id: 1
63
- description: ancient task
64
- position: 1
65
-
1
+ --- !omap
2
+ - first:
3
+ id: 1
4
+ created_at: 2007-06-11
5
+ backlog_id: 1
6
+ period_id: 2
7
+ description: first task
8
+ position: 1
9
+ - another:
10
+ id: 2
11
+ created_at: 2007-06-12
12
+ backlog_id: 1
13
+ period_id: 3
14
+ description: second task
15
+ position: 1
16
+ - postponed:
17
+ id: 3
18
+ created_at: 2007-06-12
19
+ backlog_id: 1
20
+ period_id: 3
21
+ description: postponed task
22
+ finished_at: 2007-08-02 14:15:42
23
+ resolution: POSTPONED
24
+ - started:
25
+ id: 4
26
+ created_at: 2007-08-02 14:15:42
27
+ backlog_id: 2
28
+ period_id: 3
29
+ description: third task
30
+ position: 2
31
+ - in_last_period:
32
+ id: 5
33
+ created_at: 2007-08-02 14:15:42
34
+ backlog_id: 1
35
+ period_id: 4
36
+ description: task in last period
37
+ initial_estimate: 1.0
38
+ position: 1
39
+ previous_task_id: 3
40
+ - not_planned:
41
+ id: 6
42
+ created_at: 2007-08-02 14:15:42
43
+ backlog_id: 1
44
+ description: unplanned task
45
+ position: 1
46
+ - supertask:
47
+ id: 7
48
+ created_at: 2007-06-12
49
+ backlog_id: 1
50
+ period_id: 3
51
+ description: super task
52
+ position: 3
53
+ - subtask:
54
+ id: 8
55
+ created_at: 2007-06-12
56
+ parent_id: 7
57
+ description: sub task
58
+ position: 1
59
+ - in_ancient:
60
+ id: 9
61
+ created_at: 2007-06-03
62
+ backlog_id: 1
63
+ period_id: 1
64
+ description: ancient task
65
+ position: 1
66
+ - subsubtask_2:
67
+ id: 10
68
+ created_at: 2007-06-12
69
+ parent_id: 8
70
+ description: sub sub task
71
+ position: 1
@@ -46,7 +46,7 @@ unverified_user:
46
46
  email: unverified_user@example.com
47
47
  verified: false
48
48
  security_token: random_token_string
49
- token_expiry: <%= (Clock.now + 1.day) %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
49
+ token_expiry: <%= (Clock.now + User.token_lifetime) %> # for mysql, add .strftime("%y-%m-%d %H:%M:%S")
50
50
  deleted: false
51
51
 
52
52
  no_password_user:
@@ -12,6 +12,7 @@ class TasksControllerTest < Test::Unit::TestCase
12
12
  @request = ActionController::TestRequest.new
13
13
  @response = ActionController::TestResponse.new
14
14
  @request.session[:user_id] = 1000001
15
+ assert_sequences
15
16
  end
16
17
 
17
18
  def teardown
@@ -109,7 +109,7 @@ class UserControllerTest < Test::Unit::TestCase
109
109
 
110
110
  def test_welcome__fails_if_expired_token
111
111
  user = users(:unverified_user)
112
- Clock.advance_by_days 2 # now past verification deadline
112
+ Clock.time = Clock.now + User.token_lifetime + 1 # now past verification deadline
113
113
  get :welcome, :user=> { :id => user.id }, :key => user.security_token
114
114
  user.reload
115
115
  assert !user.verified
@@ -46,7 +46,7 @@ class Test::Unit::TestCase
46
46
 
47
47
  Period.find(:all).each do |p|
48
48
  p.open_tasks.each_with_index do |t, i|
49
- assert_equal i+1, t.position
49
+ assert_equal i+1, t.position, "Open tasks for period #{p.id} are not in sequence:\n#{p.open_tasks.map{|t|[t.id, t.position]}.inspect}\nTask #{t.id} position does not match."
50
50
  end
51
51
  end
52
52
  end
@@ -17,7 +17,7 @@ class UserTest < Test::Unit::TestCase
17
17
 
18
18
  def test_authenticate_by_token__fails_if_expired
19
19
  user = users(:unverified_user)
20
- Clock.time = Clock.now + 2.days
20
+ Clock.time = Clock.now + User.token_lifetime + 1.days
21
21
  assert_nil User.authenticate_by_token(user.id, user.security_token)
22
22
  end
23
23
 
@@ -46,18 +46,18 @@ class UserTest < Test::Unit::TestCase
46
46
  assert_not_nil token
47
47
  user.reload
48
48
  assert_equal token, user.security_token
49
- assert_equal((Clock.now + user.token_lifetime).to_i, user.token_expiry.to_i)
49
+ assert_equal((Clock.now + User.token_lifetime).to_i, user.token_expiry.to_i)
50
50
  end
51
51
 
52
52
  def test_generate_security_token__reuses_token_when_not_stale
53
53
  user = users(:unverified_user)
54
- Clock.time = Clock.now + user.token_lifetime/2 - 1
54
+ Clock.time = Clock.now + User.token_lifetime/2 - 1
55
55
  assert_equal user.security_token, user.generate_security_token
56
56
  end
57
57
 
58
58
  def test_generate_security_token__generates_new_token_when_getting_stale
59
59
  user = users(:unverified_user)
60
- Clock.time = Clock.now + user.token_lifetime/2
60
+ Clock.time = Clock.now + User.token_lifetime/2
61
61
  assert_not_equal user.security_token, user.generate_security_token
62
62
  end
63
63
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: backlog
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.10.2
7
- date: 2007-09-23 00:00:00 +02:00
6
+ version: 0.10.3
7
+ date: 2007-09-24 00:00:00 +02:00
8
8
  summary: Application to aid collecting, processing, organizing, reviewing and doing tasks.
9
9
  require_paths:
10
10
  - lib