backlog 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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