mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-16 15:20:13 +01:00
get project integrations and login controller tests running
This commit is contained in:
parent
59a4d5ede0
commit
96db48dd86
36 changed files with 179 additions and 223 deletions
1
Gemfile
1
Gemfile
|
|
@ -12,6 +12,7 @@ gem "mysql2"
|
|||
|
||||
gem "highline", "~>1.5.0"
|
||||
gem "RedCloth"
|
||||
gem "formatize"
|
||||
gem "sanitize", "~>1.2.1"
|
||||
gem "will_paginate"
|
||||
gem "acts_as_list", "~>0.1.4"
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ GEM
|
|||
acts_as_list (0.1.5)
|
||||
arel (3.0.2)
|
||||
bcrypt-ruby (3.0.1)
|
||||
bluecloth (2.2.0)
|
||||
builder (3.0.0)
|
||||
coffee-rails (3.2.2)
|
||||
coffee-script (>= 2.2.0)
|
||||
|
|
@ -45,6 +46,10 @@ GEM
|
|||
erubis (2.7.0)
|
||||
execjs (1.3.0)
|
||||
multi_json (~> 1.0)
|
||||
formatize (1.1.0)
|
||||
RedCloth (~> 4.2)
|
||||
actionpack (~> 3.0)
|
||||
bluecloth (~> 2.2)
|
||||
gem_plugin (0.2.3)
|
||||
highline (1.5.2)
|
||||
hike (1.2.1)
|
||||
|
|
@ -131,6 +136,7 @@ DEPENDENCIES
|
|||
acts_as_list (~> 0.1.4)
|
||||
bcrypt-ruby (~> 3.0.0)
|
||||
coffee-rails (~> 3.2.1)
|
||||
formatize
|
||||
highline (~> 1.5.0)
|
||||
htmlentities (~> 4.3.0)
|
||||
jquery-rails
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
protect_from_forgery
|
||||
|
||||
helper :application
|
||||
include LoginSystem
|
||||
helper_method :current_user, :prefs, :format_date, :markdown
|
||||
|
||||
|
|
@ -143,14 +142,6 @@ class ApplicationController < ActionController::Base
|
|||
return json_elems
|
||||
end
|
||||
|
||||
# Uses RedCloth to transform text using either Textile or Markdown Need to
|
||||
# require redcloth above RedCloth 3.0 or greater is needed to use Markdown,
|
||||
# otherwise it only handles Textile
|
||||
#
|
||||
def markdown(text)
|
||||
RedCloth.new(text).to_html
|
||||
end
|
||||
|
||||
# Here's the concept behind this "mobile content negotiation" hack: In
|
||||
# addition to the main, AJAXy Web UI, Tracks has a lightweight low-feature
|
||||
# 'mobile' version designed to be suitablef or use from a phone or PDA. It
|
||||
|
|
@ -223,7 +214,7 @@ class ApplicationController < ActionController::Base
|
|||
|
||||
def redirect_back_or_home
|
||||
respond_to do |format|
|
||||
format.html { redirect_back_or_default home_url }
|
||||
format.html { redirect_back_or_default root_url }
|
||||
format.m { redirect_back_or_default mobile_url }
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class IntegrationsController < ApplicationController
|
|||
message = Mail.new(params[:message])
|
||||
|
||||
# find user
|
||||
user = User.where("preferences.sms_email = ?", message.from).includes(:preferences).first
|
||||
user = User.where("preferences.sms_email = ?", message.from).includes(:preference).first
|
||||
if user.nil?
|
||||
render :text => "No user found", :status => 404
|
||||
return false
|
||||
|
|
|
|||
|
|
@ -27,15 +27,13 @@ class LoginController < ApplicationController
|
|||
@username = session[:cas_user]
|
||||
@login_url = CASClient::Frameworks::Rails::Filter.login_url(self)
|
||||
end
|
||||
if openid_enabled? && using_open_id?
|
||||
login_openid
|
||||
elsif cas_enabled? && session[:cas_user]
|
||||
if cas_enabled? && session[:cas_user]
|
||||
login_cas
|
||||
else
|
||||
@page_title = "TRACKS::Login"
|
||||
cookies[:preferred_auth] = prefered_auth? unless cookies[:preferred_auth]
|
||||
case request.method
|
||||
when :post
|
||||
when 'POST'
|
||||
if @user = User.authenticate(params['user_login'], params['user_password'])
|
||||
session['user_id'] = @user.id
|
||||
# If checkbox on login page checked, we don't expire the session after 1 hour
|
||||
|
|
@ -54,7 +52,7 @@ class LoginController < ApplicationController
|
|||
@login = params['user_login']
|
||||
notify :warning, t('login.unsuccessful')
|
||||
end
|
||||
when :get
|
||||
when 'GET'
|
||||
if User.no_users_yet?
|
||||
redirect_to signup_path
|
||||
return
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ class ProjectsController < ApplicationController
|
|||
|
||||
def index
|
||||
@source_view = params['_source_view'] || 'project_list'
|
||||
@new_project = current_user.projects.build
|
||||
if params[:projects_and_actions]
|
||||
projects_and_actions
|
||||
else
|
||||
|
|
@ -19,15 +18,22 @@ class ProjectsController < ApplicationController
|
|||
if params[:only_active_with_no_next_actions]
|
||||
@projects = current_user.projects.active.select { |p| count_undone_todos(p) == 0 }
|
||||
else
|
||||
@projects = current_user.projects
|
||||
@projects = current_user.projects.all
|
||||
end
|
||||
@new_project = current_user.projects.build
|
||||
respond_to do |format|
|
||||
format.html &render_projects_html
|
||||
format.m &render_projects_mobile
|
||||
format.xml { render :xml => @projects.to_xml( :except => :user_id ) }
|
||||
format.rss &render_rss_feed
|
||||
format.atom &render_atom_feed
|
||||
format.text &render_text_feed
|
||||
format.rss do
|
||||
@feed_title = I18n.t('models.project.feed_title')
|
||||
@feed_description = I18n.t('models.project.feed_description', :username => current_user.display_name)
|
||||
end
|
||||
format.atom do
|
||||
@feed_title = I18n.t('models.project.feed_title')
|
||||
@feed_description = I18n.t('models.project.feed_description', :username => current_user.display_name)
|
||||
end
|
||||
format.text
|
||||
format.autocomplete &render_autocomplete
|
||||
end
|
||||
end
|
||||
|
|
@ -144,16 +150,9 @@ class ProjectsController < ApplicationController
|
|||
render_failure "Expected post format is valid xml like so: <request><project><name>project name</name></project></request>."
|
||||
return
|
||||
end
|
||||
|
||||
@project = current_user.projects.build
|
||||
params_are_invalid = true
|
||||
if (params['project'] || (params['request'] && params['request']['project']))
|
||||
@project.attributes = params['project'] || params['request']['project']
|
||||
params_are_invalid = false
|
||||
end
|
||||
@project = current_user.projects.build(params['project'])
|
||||
@go_to_project = params['go_to_project']
|
||||
@saved = @project.save
|
||||
|
||||
@project_not_done_counts = { @project.id => 0 }
|
||||
@active_projects_count = current_user.projects.active.count
|
||||
@contexts = current_user.contexts
|
||||
|
|
@ -161,9 +160,7 @@ class ProjectsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.js { @down_count = current_user.projects.size }
|
||||
format.xml do
|
||||
if @project.new_record? && params_are_invalid
|
||||
render_failure "Expected post format is valid xml like so: <request><project><name>project name</name></project></request>."
|
||||
elsif @project.new_record?
|
||||
if @project.new_record?
|
||||
render_failure @project.errors.full_messages.join(', ')
|
||||
else
|
||||
head :created, :location => project_url(@project), :text => @project.id
|
||||
|
|
@ -350,33 +347,6 @@ class ProjectsController < ApplicationController
|
|||
render :action => 'project_mobile'
|
||||
end
|
||||
end
|
||||
|
||||
def render_rss_feed
|
||||
lambda do
|
||||
render_rss_feed_for @projects, :feed => feed_options,
|
||||
:title => :name,
|
||||
:item => { :description => lambda { |p| @template.summary(p) } }
|
||||
end
|
||||
end
|
||||
|
||||
def render_atom_feed
|
||||
lambda do
|
||||
render_atom_feed_for @projects, :feed => feed_options,
|
||||
:item => { :description => lambda { |p| @template.summary(p) },
|
||||
:title => :name,
|
||||
:author => lambda { |p| nil } }
|
||||
end
|
||||
end
|
||||
|
||||
def feed_options
|
||||
Project.feed_options(current_user)
|
||||
end
|
||||
|
||||
def render_text_feed
|
||||
lambda do
|
||||
render :action => 'index', :layout => false, :content_type => Mime::TEXT
|
||||
end
|
||||
end
|
||||
|
||||
def render_autocomplete
|
||||
lambda do
|
||||
|
|
|
|||
|
|
@ -75,9 +75,9 @@ module ProjectsHelper
|
|||
project_description = ''
|
||||
project_description += Tracks::Utils.render_text( project.description ) unless project.description.blank?
|
||||
project_description += content_tag(:p,
|
||||
"#{count_undone_todos_phrase(p)}. " + t('projects.project_state', :state => project.state)
|
||||
"#{count_undone_todos_phrase(p)}. #{t('projects.project_state', :state => project.state)}".html_safe
|
||||
)
|
||||
project_description
|
||||
raw project_description
|
||||
end
|
||||
|
||||
def needsreview_class(item)
|
||||
|
|
|
|||
|
|
@ -47,13 +47,6 @@ class Project < ActiveRecord::Base
|
|||
NullProject.new
|
||||
end
|
||||
|
||||
def self.feed_options(user)
|
||||
{
|
||||
:title => I18n.t('models.project.feed_title'),
|
||||
:description => I18n.t('models.project.feed_description', :username => user.display_name)
|
||||
}
|
||||
end
|
||||
|
||||
def hide_todos
|
||||
todos.each do |t|
|
||||
unless t.completed? || t.deferred?
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ set myUsername to "<%= current_user.login %>"
|
|||
set myToken to "<%= current_user.token %>"
|
||||
set myContextID to <%= context.id %> (* <%= context.name %> *)
|
||||
|
||||
-- Display dialog to enter your description
|
||||
-- Display dialog to enter your description
|
||||
display dialog "<%= t('integrations.applescript_next_action_prompt') %>" default answer ""
|
||||
set myDesc to text returned of the result
|
||||
|
||||
-- Now send all that info to Tracks
|
||||
-- Edit the URL of your Tracks installation if necessary"
|
||||
tell application "<%= home_url %>backend/api"
|
||||
tell application "<%= root_url %>backend/api"
|
||||
set returnValue to call xmlrpc {method name:"NewTodo", parameters:{myUsername, myToken, myContextID, myDesc}}
|
||||
end tell
|
||||
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
(*
|
||||
(*
|
||||
Script to grab the sender and subject of the selected
|
||||
Mail message(s), and create new next action(s) with description
|
||||
"Email [sender] about [subject]"
|
||||
|
||||
If you have Growl, it pops a notification up with the id of
|
||||
the newly created action.
|
||||
the newly created action.
|
||||
*)
|
||||
|
||||
(* Edit appropriately for your setup *)
|
||||
|
|
@ -50,25 +50,25 @@ on importMessage(theMessage)
|
|||
|
||||
-- Now send all that info to Tracks
|
||||
-- Edit the URL of your Tracks installation if necessary"
|
||||
tell application "<%= home_url %>backend/api"
|
||||
tell application "<%= root_url %>backend/api"
|
||||
set returnValue to call xmlrpc {method name:"NewTodo", parameters:{myUsername, myToken, myContextID, myDesc, myNote}}
|
||||
end tell
|
||||
|
||||
(* Growl support - comment out or delete this section if
|
||||
(* Growl support - comment out or delete this section if
|
||||
you don't have Growl *)
|
||||
tell application "GrowlHelperApp"
|
||||
set the allNotificationsList to ¬
|
||||
{"Tracks Notification"}
|
||||
|
||||
-- Make a list of the notifications
|
||||
-- that will be enabled by default.
|
||||
-- Those not enabled by default can be enabled later
|
||||
-- Make a list of the notifications
|
||||
-- that will be enabled by default.
|
||||
-- Those not enabled by default can be enabled later
|
||||
-- in the 'Applications' tab of the growl prefpane.
|
||||
set the enabledNotificationsList to ¬
|
||||
{"Tracks Notification"}
|
||||
|
||||
-- Register our script with growl.
|
||||
-- You can optionally (as here) set a default icon
|
||||
-- You can optionally (as here) set a default icon
|
||||
-- for this script's notifications.
|
||||
register as application ¬
|
||||
"Tracks Applescript" all notifications allNotificationsList ¬
|
||||
|
|
@ -5,7 +5,7 @@ using terms from application "Quicksilver"
|
|||
set myToken to "<%= current_user.token %>"
|
||||
set myContextID to <%= context.id %> (* <%= context.name %> *)
|
||||
|
||||
tell application "<%= home_url %>backend/api"
|
||||
tell application "<%= root_url %>backend/api"
|
||||
set returnValue to call xmlrpc {method name:"NewTodo", parameters:{myUsername, myToken, myContextID, ThisClipping}}
|
||||
end tell
|
||||
tell application "Quicksilver"
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<Module>
|
||||
<ModulePrefs title="Tracks" directory_title="Tracks" description="<%= t('integrations.gmail_description') %>" author="Tracks" author_email="butshesagirl@rousette.org.uk" author_affiliation="Tracks" author_location="UK" title_url="http://www.getontracks.org/" screenshot="http://www.getontracks.org/images/uploads/tracks_home_thumb.png" thumbnail="http://www.getontracks.org/images/uploads/tracks_tickler.png" category="communication" category2="tools" height="300">
|
||||
</ModulePrefs>
|
||||
<Content type="url" href="<%= home_url %>mobile"/>
|
||||
<Content type="url" href="<%= root_url %>mobile"/>
|
||||
</Module>
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
|
||||
<p>If you enter the following entry to your crontab, you will receive email every day around 5 AM with a list of the upcoming actions which are due within the next 7 days.</p>
|
||||
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= home_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= root_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
|
||||
<p>You can of course use other text <%= link_to 'feeds provided by Tracks', feeds_path %> -- why not email a list of next actions in a particular project to a group of colleagues who are working on the project?</p>
|
||||
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
If Tracks is running on the same server as your mail server, you can use the integrated mail handler built into tracks. Steps to set it up:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Go to <%= link_to t('layouts.navigation.preferences'), preferences_url %>
|
||||
<li>Go to <%= link_to t('layouts.navigation.preferences'), preferences_url %>
|
||||
and set your "<%= Preference.human_attribute_name('sms_email') %>" and
|
||||
"<%= Preference.human_attribute_name('sms_context') %>" for todos sent in
|
||||
via email (which could come from an SMS message)</li>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<li><a href="#message_gateway">Integrate Tracks with an email server to be able to send an action through email to Tracks</a></li>
|
||||
<li><a href="#google_gadget">Add Tracks as a Google Gmail gadget</a></li>
|
||||
</ul><br/>
|
||||
<p>Do you have one of your own to add?
|
||||
<p>Do you have one of your own to add?
|
||||
<a href="http://www.getontracks.org/forums/viewforum/10/" title="Tracks | Tips and Tricks">Tell us about
|
||||
it in our Tips and Tricks forum</a> and we may include it on this page in a future versions of Tracks.
|
||||
</p>
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
|
||||
<p>If you enter the following entry to your crontab, you will receive email every day around 5 AM with a list of the upcoming actions which are due within the next 7 days.</p>
|
||||
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= home_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= root_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
|
||||
<p>You can of course use other text <%= link_to 'feeds provided by Tracks', feeds_path %> -- why not email a list of next actions in a particular project to a group of colleagues who are working on the project?</p>
|
||||
|
||||
|
|
@ -100,7 +100,7 @@
|
|||
If Tracks is running on the same server as your mail server, you can use the integrated mail handler built into tracks. Steps to set it up:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Go to <%= link_to t('layouts.navigation.preferences'), preferences_url %> and
|
||||
<li>Go to <%= link_to t('layouts.navigation.preferences'), preferences_url %> and
|
||||
set your "<%= Preference.human_attribute_name('sms_email') %>" and
|
||||
"<%= Preference.human_attribute_name('sms_context') %>" for todos sent in
|
||||
via email (which could come from an SMS message)</li>
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
<a name="applescript2-section"> </a>
|
||||
<h2>Voeg een acties toe met Applescript op basis van de huidig geselecteerde e-mail in Mail.app</h2>
|
||||
<p>Dit script neemt de verstuurder en het onderwerp van de geselecteerde email(s)
|
||||
<p>Dit script neemt de verstuurder en het onderwerp van de geselecteerde email(s)
|
||||
van Mail over en maakt een nieuwe acties voor elke email met de beschrijving
|
||||
"Email [sender] about [subject]". De beschrijving wordt, als nodig, na 100 karakters afgebroken
|
||||
(dit is de limiet voor een beschrijving). Het heeft ook Growl notificaties mocht je Growl geïnstalleerd hebben.</p>
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
|
||||
<p>Als je de volgende regel toevoegd aan jouw crontab, dat ontvang je een e-mail op elke dag rond 05:00 met een lijst met acties waarvan de deadline afloopt binnen de komende 7 dagen.</p>
|
||||
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= home_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
<textarea id="cron" name="cron">0 5 * * * /usr/bin/curl -0 "<%= root_url %>todos.txt?due=6&token=<%= current_user.token %>" | /usr/bin/mail -e -s 'Tracks actions due in the next 7 days' youremail@yourdomain.com</textarea>
|
||||
|
||||
<p>Uiteraard kan je ook een andere <%= link_to 'text feed gebruiken die Tracks biedt', feeds_path %> -- bijvoorbeeld een email met een lijst van acties voor een specifiek project naar een groep collega's die werken aan dat project?</p>
|
||||
|
||||
|
|
@ -103,7 +103,7 @@
|
|||
Als Tracks draait op dezelfde server als jouw mailserver, dan kan je de geïntegreerde mail handler gebruiken van Tracks. Om dit in te stellen:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Ga naar <%= link_to t('layouts.navigation.preferences'), preferences_url %>
|
||||
<li>Ga naar <%= link_to t('layouts.navigation.preferences'), preferences_url %>
|
||||
en stel in "<%= Preference.human_attribute_name('sms_email') %>" en
|
||||
"<%= Preference.human_attribute_name('sms_context') %>" voor acties die
|
||||
verzonden zijn via email (die bijv. komen via een SMS message)</li>
|
||||
|
|
@ -122,7 +122,7 @@
|
|||
<p>
|
||||
Je kan nu ook jouw projects/actions beheren in Gmail met de Tracks Gmail Gadget.
|
||||
Voeg Tracks Gmail gadget toe aan de sidebar van Gmail en volg jouw acties
|
||||
of voeg een nieuwe actie toe zonder apart een nieuw browser tab/scherm te openen
|
||||
of voeg een nieuwe actie toe zonder apart een nieuw browser tab/scherm te openen
|
||||
voor Tracks. Om dit in te stellen:
|
||||
</p>
|
||||
<ul>
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
<%= home_url %>contexts.xml
|
||||
<%= root_url %>contexts.xml
|
||||
>> <?xml version="1.0" encoding="UTF-8"?>
|
||||
<contexts>...</contexts>
|
||||
</code>
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
<%= home_url %>contexts/51.xml
|
||||
<%= root_url %>contexts/51.xml
|
||||
>> <?xml version="1.0" encoding="UTF-8"?>
|
||||
<context>...</context>
|
||||
</code>
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
<%= home_url %>contexts/51/todos.xml
|
||||
<%= root_url %>contexts/51/todos.xml
|
||||
>> <?xml version="1.0" encoding="UTF-8"?>
|
||||
<todos type="array">...</todos>
|
||||
</code>
|
||||
|
|
@ -75,7 +75,7 @@ field to <code>ID, created_at, modified_at, completed_at</code> by adding the pa
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
<%= home_url %>tickler.xml?limit_fields=index
|
||||
<%= root_url %>tickler.xml?limit_fields=index
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
|
|
@ -89,9 +89,9 @@ field to <code>ID, created_at, modified_at, completed_at</code> by adding the pa
|
|||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
-d "<project><name>Build a treehouse for the kids</name></project>" \
|
||||
<%= home_url %>projects.xml -i
|
||||
<%= root_url %>projects.xml -i
|
||||
>> HTTP/1.1 201 Created
|
||||
Location: <%= home_url %>projects/65.xml
|
||||
Location: <%= root_url %>projects/65.xml
|
||||
...
|
||||
</code>
|
||||
</pre>
|
||||
|
|
@ -102,9 +102,9 @@ Location: <%= home_url %>projects/65.xml
|
|||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
-d "<todo><description>Model treehouse in SketchUp</description><context_id>2</context_id><project_id>65</project_id></todo>" \
|
||||
<%= home_url %>todos.xml -i
|
||||
<%= root_url %>todos.xml -i
|
||||
>> HTTP/1.1 201 Created
|
||||
Location: <%= home_url %>todos/452.xml
|
||||
Location: <%= root_url %>todos/452.xml
|
||||
...
|
||||
</code>
|
||||
</pre>
|
||||
|
|
@ -115,7 +115,7 @@ Location: <%= home_url %>todos/452.xml
|
|||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" -X PUT \
|
||||
-d "<todo><notes>use maple texture</notes></todos>" \
|
||||
<%= home_url %>todos/452.xml -i
|
||||
<%= root_url %>todos/452.xml -i
|
||||
>> HTTP/1.1 200 OK
|
||||
...
|
||||
|
||||
|
|
@ -135,7 +135,7 @@ Location: <%= home_url %>todos/452.xml
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" -X PUT \
|
||||
<%= home_url %>todos/452/toggle_check.xml -i
|
||||
<%= root_url %>todos/452/toggle_check.xml -i
|
||||
>> HTTP/1.1 200 OK
|
||||
...
|
||||
|
||||
|
|
@ -156,7 +156,7 @@ Location: <%= home_url %>todos/452.xml
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" -X DELETE \
|
||||
<%= home_url %>todos/452.xml -i
|
||||
<%= root_url %>todos/452.xml -i
|
||||
>> HTTP/1.1 200 OK
|
||||
...
|
||||
</code>
|
||||
|
|
@ -175,7 +175,7 @@ Location: <%= home_url %>todos/452.xml
|
|||
<pre>
|
||||
<code>
|
||||
$ curl -u username:p4ssw0rd -H "Content-Type: text/xml" \
|
||||
<%= home_url %>contexts/2/todos.xml
|
||||
<%= root_url %>contexts/2/todos.xml
|
||||
>> <?xml version="1.0" encoding="UTF-8"?>
|
||||
<nil-classes type="array"/>
|
||||
|
||||
|
|
@ -192,8 +192,8 @@ $ script/console
|
|||
Loading development environment (Rails 1.2.4)
|
||||
>> class Context < ActiveResource::Base; end
|
||||
=> nil
|
||||
>> Context.site = "<%= home_url %>"
|
||||
=> "<%= home_url %>"
|
||||
>> Context.site = "<%= root_url %>"
|
||||
=> "<%= root_url %>"
|
||||
>> Context.site.user = "username"
|
||||
=> "username"
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ form_for(note, :html => {
|
|||
:class => "inline-form edit-note-form"}) do |f|
|
||||
-%>
|
||||
|
||||
<div id="error_status"><%= error_messages_for("note") %></div>
|
||||
<div id="error_status"><%= get_list_of_error_messages_for(note) %></div>
|
||||
|
||||
<%= f.hidden_field( "project_id" ) %>
|
||||
<%= f.text_area( "body", "cols" => 70, "rows" => 15, "tabindex" => 1 ) %>
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<div id="project_new" class="project_new" style="display:block">
|
||||
<%= form_for(@new_project, :html => {:id => 'project_form',:name=>'project',:class => "inline-form", :method => :post }) do -%>
|
||||
<div id="error_status"><%= error_messages_for("project") %></div>
|
||||
<div id="error_status"><%= get_list_of_error_messages_for(@new_project) %></div>
|
||||
|
||||
<label for="project_name"><%= Project.human_attribute_name(:name) %>:</label><br />
|
||||
<%= text_field 'project', 'name', "tabindex" => next_tab_index %><br />
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<% end -%>
|
||||
<div id="project_name" style="width: 100%;"><%= project.name -%></div>
|
||||
</h2>
|
||||
<div id="<%= dom_id(project, "container")%>" class="list"><%-# list needs to be here for edit form to work -%>
|
||||
<div id="<%= dom_id(project, "container")%>" class="list">
|
||||
<%= render :partial => "projects/project_settings", :object => project, :locals => { :collapsible => collapsible } %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -18,4 +18,4 @@
|
|||
</div>
|
||||
<%= render :partial => "todos/todo", :collection => @not_done, :locals => { :parent_container_type => "project" } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -7,7 +7,7 @@ project = project_form
|
|||
:class => "inline-form edit-project-form",
|
||||
:method => :put }) do
|
||||
-%>
|
||||
<div id="edit_error_status"><%= error_messages_for("project") %></div>
|
||||
<div id="edit_error_status"><%= get_list_of_error_messages_for(@project) %></div>
|
||||
<%= source_view_tag( @source_view ) -%>
|
||||
|
||||
<label for="project_name">Name:</label><br/>
|
||||
|
|
@ -37,7 +37,7 @@ function update_active_projects_container() {
|
|||
}
|
||||
|
||||
function html_for_error_messages() {
|
||||
return "<%= escape_javascript(error_messages_for('project')) %>";
|
||||
return "<%= escape_javascript(get_list_of_error_messages_for(@project)) %>";
|
||||
}
|
||||
|
||||
function html_for_project_listing() {
|
||||
|
|
|
|||
12
app/views/projects/index.atom.builder
Normal file
12
app/views/projects/index.atom.builder
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
atom_feed do |feed|
|
||||
feed.title(@feed_title)
|
||||
feed.subtitle(@feed_description)
|
||||
feed.updated(@projects.last.updated_at)
|
||||
|
||||
@projects.each do |project|
|
||||
feed.entry(project) do |entry|
|
||||
entry.title(h(project.name))
|
||||
entry.content(project_summary(project), :type => :html)
|
||||
end
|
||||
end
|
||||
end
|
||||
20
app/views/projects/index.rss.builder
Normal file
20
app/views/projects/index.rss.builder
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
xml.instruct! :xml, :version => "1.0"
|
||||
xml.rss :version => "2.0" do
|
||||
xml.channel do
|
||||
xml.title @feed_title
|
||||
xml.description @feed_description
|
||||
xml.link contexts_url
|
||||
xml.language 'en-us'
|
||||
xml.ttl 40
|
||||
|
||||
@projects.each do |project|
|
||||
xml.item do
|
||||
xml.title h(project.name)
|
||||
xml.description project_summary(project)
|
||||
xml.pubDate project.created_at.to_s(:rfc822)
|
||||
xml.link project_url(project)
|
||||
xml.guid project_url(project)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -14,8 +14,7 @@
|
|||
<div class="add_note_link"><%= link_to t('projects.add_note'), '#' %> </div>
|
||||
<h2><%= t('projects.notes') %></h2>
|
||||
<div id="empty-n" style="display:<%= @project.notes.empty? ? 'block' : 'none'%>;">
|
||||
<%= render :partial => "shared/empty",
|
||||
:locals => { :message => t('projects.no_notes_attached')} %>
|
||||
<div class="message"><p><%= t('projects.no_notes_attached') %></p></div>
|
||||
</div>
|
||||
<%= render :partial => "notes/notes_summary", :collection => @project.notes %>
|
||||
</div>
|
||||
|
|
@ -29,5 +28,5 @@
|
|||
|
||||
<div id="input_box">
|
||||
<%= render :partial => "shared/add_new_item_form" %>
|
||||
<%= render :file => "sidebar/sidebar.html.erb" %>
|
||||
<%= render :file => "sidebar/sidebar" %>
|
||||
</div><!-- End of input box -->
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
<div class="message">
|
||||
<p><%= message %></p>
|
||||
</div>
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
module Tracks
|
||||
|
||||
class Config
|
||||
|
||||
def self.salt
|
||||
SITE_CONFIG['salt']
|
||||
end
|
||||
|
|
@ -15,7 +17,7 @@ module Tracks
|
|||
def self.cas_enabled?
|
||||
auth_schemes.include?('cas')
|
||||
end
|
||||
|
||||
|
||||
def self.prefered_auth?
|
||||
if SITE_CONFIG['prefered_auth']
|
||||
SITE_CONFIG['prefered_auth']
|
||||
|
|
@ -23,5 +25,7 @@ module Tracks
|
|||
auth_schemes.first
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,16 +1,8 @@
|
|||
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
||||
require 'integrations_controller'
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class IntegrationsController; def rescue_action(e) raise e end; end
|
||||
|
||||
class IntegrationsControllerTest < ActionController::TestCase
|
||||
fixtures :users, :preferences, :projects, :contexts, :todos, :recurring_todos, :tags, :taggings
|
||||
|
||||
def setup
|
||||
@controller = IntegrationsController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
end
|
||||
|
||||
def test_page_load
|
||||
|
|
@ -22,15 +14,15 @@ class IntegrationsControllerTest < ActionController::TestCase
|
|||
def test_cloudmailin_integration_success
|
||||
SITE_CONFIG['cloudmailin'] = "123456789"
|
||||
post :cloudmailin, {
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"5555555555@tmomail.net",
|
||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"5555555555@tmomail.net",
|
||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
||||
}
|
||||
|
||||
|
|
@ -40,15 +32,15 @@ class IntegrationsControllerTest < ActionController::TestCase
|
|||
def test_cloudmailin_integration_invalid_signature
|
||||
SITE_CONFIG['cloudmailin'] = "12345678901234567890"
|
||||
post :cloudmailin, {
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"5555555555@tmomail.net",
|
||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"5555555555@tmomail.net",
|
||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
||||
}
|
||||
|
||||
|
|
@ -58,18 +50,19 @@ class IntegrationsControllerTest < ActionController::TestCase
|
|||
def test_cloudmailin_integration_unknown_address
|
||||
SITE_CONFIG['cloudmailin'] = "123456789"
|
||||
post :cloudmailin, {
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"444444444444@tmomail.net",
|
||||
"signature"=>"6d2df0e807bfa9b77d24c31dce6d4515",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"html"=>"",
|
||||
"plain"=>"asdasd",
|
||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
||||
"disposable"=>"",
|
||||
"from"=>"444444444444@tmomail.net",
|
||||
"signature"=>"6d2df0e807bfa9b77d24c31dce6d4515",
|
||||
"to"=>"<123123@cloudmailin.net>",
|
||||
"subject"=>"asd",
|
||||
"x_cc_header"=>"",
|
||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <444444444444@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
||||
}
|
||||
|
||||
assert_response 404
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,19 +1,9 @@
|
|||
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
||||
require 'login_controller'
|
||||
require_dependency "login_system"
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class LoginController; def rescue_action(e) raise e end; end
|
||||
|
||||
class LoginControllerTest < ActionController::TestCase
|
||||
fixtures :preferences, :users
|
||||
|
||||
def setup
|
||||
assert_equal "test", ENV['RAILS_ENV']
|
||||
assert_equal "change-me", Tracks::Config.salt
|
||||
@controller = LoginController.new
|
||||
@request = ActionController::TestRequest.new
|
||||
@response = ActionController::TestResponse.new
|
||||
end
|
||||
|
||||
#============================================
|
||||
|
|
@ -23,15 +13,16 @@ class LoginControllerTest < ActionController::TestCase
|
|||
def test_invalid_login
|
||||
post :login, {:user_login => 'cracker', :user_password => 'secret', :user_noexpiry => 'on'}
|
||||
assert_response :success
|
||||
assert(!@response.has_session_object?(:user_id))
|
||||
assert(!session[:user_id])
|
||||
assert_template "login"
|
||||
end
|
||||
|
||||
def test_login_with_valid_admin_user
|
||||
@request.session['return-to'] = "/bogus/location"
|
||||
post :login, {:user_login => 'admin', :user_password => 'abracadabra', :user_noexpiry => 'on'}
|
||||
user = User.find(session['user_id'])
|
||||
assert_equal user.id, @response.session['user_id']
|
||||
user = User.find_by_id(session['user_id'])
|
||||
assert_not_nil user
|
||||
assert_equal user.id, session['user_id']
|
||||
assert_equal user.login, "admin"
|
||||
assert user.is_admin
|
||||
assert_equal "Login successful: session will not expire.", flash[:notice]
|
||||
|
|
@ -40,12 +31,13 @@ class LoginControllerTest < ActionController::TestCase
|
|||
|
||||
def test_login_with_valid_standard_user
|
||||
post :login, {:user_login => 'jane', :user_password => 'sesame', :user_noexpiry => 'off'}
|
||||
user = User.find(session['user_id'])
|
||||
assert_equal user.id, @response.session['user_id']
|
||||
user = User.find_by_id(session['user_id'])
|
||||
assert_not_nil user
|
||||
assert_equal user.id, session['user_id']
|
||||
assert_equal user.login, "jane"
|
||||
assert user.is_admin == false || user.is_admin == 0
|
||||
assert_equal "Login successful: session will expire after 1 hour of inactivity.", flash[:notice]
|
||||
assert_redirected_to home_url
|
||||
assert_redirected_to root_url
|
||||
end
|
||||
|
||||
def test_login_with_no_users_redirects_to_signup
|
||||
|
|
@ -58,21 +50,21 @@ class LoginControllerTest < ActionController::TestCase
|
|||
login_as :admin_user
|
||||
get :logout
|
||||
assert_nil(session['user_id'])
|
||||
assert_redirected_to :controller => 'login', :action => 'login'
|
||||
assert_redirected_to login_url
|
||||
end
|
||||
|
||||
# Test login with a bad password for existing user
|
||||
#
|
||||
#
|
||||
def test_login_bad_password
|
||||
post :login, {:user_login => 'jane', :user_password => 'wrong', :user_noexpiry => 'on'}
|
||||
assert(!@response.has_session_object?(:user))
|
||||
assert(!session[:user])
|
||||
assert_equal "Login unsuccessful.", flash[:warning]
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
def test_login_bad_login
|
||||
post :login, {:user_login => 'blah', :user_password => 'sesame', :user_noexpiry => 'on'}
|
||||
assert(!@response.has_session_object?(:user))
|
||||
assert(!session[:user])
|
||||
assert_equal "Login unsuccessful.", flash[:warning]
|
||||
assert_response :success
|
||||
end
|
||||
|
|
@ -81,7 +73,7 @@ class LoginControllerTest < ActionController::TestCase
|
|||
post :login, :user_login => 'jane', :user_password => 'sesame', :user_noexpiry => "on"
|
||||
assert_not_nil @response.cookies["auth_token"]
|
||||
end
|
||||
|
||||
|
||||
def test_should_not_remember_me
|
||||
post :login, :user_login => 'jane', :user_password => 'sesame', :user_noexpiry => "off"
|
||||
assert_nil @response.cookies["auth_token"]
|
||||
|
|
@ -92,14 +84,14 @@ class LoginControllerTest < ActionController::TestCase
|
|||
get :logout
|
||||
assert_nil @response.cookies["auth_token"]
|
||||
end
|
||||
|
||||
|
||||
def test_should_login_with_cookie
|
||||
users(:other_user).remember_me
|
||||
@request.cookies["auth_token"] = auth_token_cookie_for(:other_user)
|
||||
get :login
|
||||
assert @controller.send(:logged_in?)
|
||||
end
|
||||
|
||||
|
||||
def test_should_fail_expired_cookie_login
|
||||
users(:other_user).remember_me
|
||||
users(:other_user).update_attribute :remember_token_expires_at, 5.minutes.ago.utc
|
||||
|
|
@ -107,7 +99,7 @@ class LoginControllerTest < ActionController::TestCase
|
|||
get :login
|
||||
assert !@controller.send(:logged_in?)
|
||||
end
|
||||
|
||||
|
||||
def test_should_fail_cookie_login
|
||||
users(:other_user).remember_me
|
||||
@request.cookies["auth_token"] = 'invalid_auth_token'
|
||||
|
|
@ -137,10 +129,9 @@ class LoginControllerTest < ActionController::TestCase
|
|||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
def auth_token_cookie_for(user)
|
||||
users(user).remember_token
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,15 +1,8 @@
|
|||
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
||||
require File.expand_path(File.dirname(__FILE__) + '/todo_container_controller_test_base')
|
||||
require 'projects_controller'
|
||||
|
||||
# Re-raise errors caught by the controller.
|
||||
class ProjectsController; def rescue_action(e) raise e end; end
|
||||
|
||||
class ProjectsControllerTest < TodoContainerControllerTestBase
|
||||
fixtures :users, :todos, :preferences, :projects, :contexts, :recurring_todos
|
||||
class ProjectsControllerTest < ActionController::TestCase
|
||||
|
||||
def setup
|
||||
perform_setup(Project, ProjectsController)
|
||||
end
|
||||
|
||||
def test_projects_list
|
||||
|
|
@ -23,35 +16,32 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
get :show, :id => p.to_param
|
||||
assert_not_nil assigns['deferred']
|
||||
assert_equal 1, assigns['deferred'].size
|
||||
|
||||
|
||||
t = p.todos.not_completed[0]
|
||||
t.show_from = 1.days.from_now.utc
|
||||
t.save!
|
||||
|
||||
|
||||
get :show, :id => p.to_param
|
||||
assert_equal 2, assigns['deferred'].size
|
||||
end
|
||||
|
||||
|
||||
def test_show_exposes_next_project_in_same_state
|
||||
login_as :admin_user
|
||||
get :show, :id => projects(:timemachine).to_param
|
||||
assert_equal(projects(:moremoney), assigns['next_project'])
|
||||
end
|
||||
|
||||
|
||||
def test_show_exposes_previous_project_in_same_state
|
||||
login_as :admin_user
|
||||
get :show, :id => projects(:moremoney).to_param
|
||||
assert_equal(projects(:timemachine), assigns['previous_project'])
|
||||
end
|
||||
|
||||
|
||||
def test_create_project_via_ajax_increments_number_of_projects
|
||||
login_as :other_user
|
||||
assert_ajax_create_increments_count 'My New Project'
|
||||
end
|
||||
|
||||
def test_create_with_comma_in_name_increments_number_of_projects
|
||||
assert_ajax_create_increments_count 'foo,bar'
|
||||
end
|
||||
|
||||
|
||||
def test_todo_state_is_project_hidden_after_hiding_project
|
||||
p = projects(:timemachine)
|
||||
todos = p.todos.find_in_state(:all, :active)
|
||||
|
|
@ -75,12 +65,14 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
assert p.reload().active?
|
||||
end
|
||||
|
||||
# RSS
|
||||
|
||||
def test_rss_feed_content
|
||||
login_as(:admin_user)
|
||||
get :index, { :format => "rss" }
|
||||
assert_equal 'application/rss+xml', @response.content_type
|
||||
#puts @response.body
|
||||
|
||||
|
||||
assert_xml_select 'rss[version="2.0"]' do
|
||||
assert_select 'channel' do
|
||||
assert_select '>title', 'Tracks Projects'
|
||||
|
|
@ -102,7 +94,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def test_rss_feed_not_accessible_to_anonymous_user_without_token
|
||||
login_as nil
|
||||
get :index, { :format => "rss" }
|
||||
|
|
@ -125,8 +117,8 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
login_as :admin_user
|
||||
get :index, { :format => "atom" }
|
||||
assert_equal 'application/atom+xml', @response.content_type
|
||||
#puts @response.body
|
||||
|
||||
# puts @response.body
|
||||
|
||||
assert_xml_select 'feed[xmlns="http://www.w3.org/2005/Atom"]' do
|
||||
assert_select '>title', 'Tracks Projects'
|
||||
assert_select '>subtitle', "Lists all the projects for #{users(:admin_user).display_name}"
|
||||
|
|
@ -159,7 +151,7 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
get :index, { :format => "atom", :token => users(:admin_user).token }
|
||||
assert_response :ok
|
||||
end
|
||||
|
||||
|
||||
def test_text_feed_content
|
||||
login_as :admin_user
|
||||
get :index, { :format => "txt" }
|
||||
|
|
@ -171,10 +163,10 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
login_as :admin_user
|
||||
p = projects(:timemachine)
|
||||
p.todos.each { |t| t.destroy }
|
||||
|
||||
|
||||
get :index, { :format => "txt", :only_active_with_no_next_actions => true }
|
||||
assert (/^\s*BUILD A WORKING TIME MACHINE\s+0 actions. Project is active.\s*$/.match(@response.body))
|
||||
assert !(/[1-9] actions/.match(@response.body))
|
||||
assert (/^\s*BUILD A WORKING TIME MACHINE\s+0 actions. Project is active.\s*$/.match(@response.body))
|
||||
assert !(/[1-9] actions/.match(@response.body))
|
||||
end
|
||||
|
||||
def test_text_feed_not_accessible_to_anonymous_user_without_token
|
||||
|
|
@ -194,12 +186,12 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
get :index, { :format => "txt", :token => users(:admin_user).token }
|
||||
assert_response :ok
|
||||
end
|
||||
|
||||
|
||||
def test_actionize_sorts_active_projects_by_number_of_tasks
|
||||
login_as :admin_user
|
||||
u = users(:admin_user)
|
||||
post :actionize, :state => "active", :format => 'js'
|
||||
|
||||
|
||||
assert_equal 1, projects(:gardenclean).position
|
||||
assert_equal 2, projects(:moremoney).position
|
||||
assert_equal 3, projects(:timemachine).position
|
||||
|
|
@ -211,15 +203,15 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
post :alphabetize, :state => "active", :format => 'js'
|
||||
assert_equal 1, projects(:timemachine).position
|
||||
assert_equal 2, projects(:gardenclean).position
|
||||
assert_equal 3, projects(:moremoney).position
|
||||
assert_equal 3, projects(:moremoney).position
|
||||
end
|
||||
|
||||
|
||||
def test_alphabetize_assigns_state
|
||||
login_as :admin_user
|
||||
post :alphabetize, :state => "active", :format => 'js'
|
||||
assert_equal "active", assigns['state']
|
||||
end
|
||||
|
||||
|
||||
def test_alphabetize_assigns_projects
|
||||
login_as :admin_user
|
||||
post :alphabetize, :state => "active", :format => 'js'
|
||||
|
|
@ -230,7 +222,4 @@ class ProjectsControllerTest < TodoContainerControllerTestBase
|
|||
assert_equal projects(:moremoney), exposed_projects[2]
|
||||
end
|
||||
|
||||
def protect_against_forgery?
|
||||
false
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ class UsersControllerTest < ActionController::TestCase
|
|||
def test_create_redirects_to_home_page
|
||||
login_as :admin_user
|
||||
post :create, :user => {:login => 'newbie', :password => 'newbiepass', :password_confirmation => 'newbiepass'}
|
||||
assert_redirected_to home_url
|
||||
assert_redirected_to root_url
|
||||
end
|
||||
|
||||
def test_create_sets_flash_message
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ ENV["RAILS_ENV"] = "test"
|
|||
require File.expand_path('../../config/environment', __FILE__)
|
||||
require 'rails/test_help'
|
||||
|
||||
{ :salt => "change-me", :authentication_schemes => ["database", "open_id"], :prefered_auth => "database"}.each{|k,v| SITE_CONFIG[k]=v}
|
||||
|
||||
class ActiveSupport::TestCase
|
||||
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
||||
#
|
||||
|
|
@ -15,17 +17,7 @@ class ActiveSupport::TestCase
|
|||
yield
|
||||
assert_not_equal initial_value, object.send(method), "#{object}##{method}"
|
||||
end
|
||||
end
|
||||
|
||||
module Tracks
|
||||
class Config
|
||||
def self.salt
|
||||
"change-me"
|
||||
end
|
||||
def self.auth_schemes
|
||||
return ["database","open_id"]
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class ActionController::TestCase
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue