diff options
Diffstat (limited to 'help')
-rw-r--r-- | help/Gemfile | 2 | ||||
-rw-r--r-- | help/app/assets/javascripts/tickets.js | 2 | ||||
-rw-r--r-- | help/app/controllers/tickets_controller.rb | 11 | ||||
-rw-r--r-- | help/app/models/account_extension/tickets.rb | 13 | ||||
-rw-r--r-- | help/app/models/ticket.rb | 11 | ||||
-rw-r--r-- | help/app/views/tickets/_edit_form.html.haml | 6 | ||||
-rw-r--r-- | help/app/views/tickets/_ticket.html.haml | 2 | ||||
-rw-r--r-- | help/app/views/tickets/new.html.haml | 2 | ||||
-rw-r--r-- | help/config/initializers/account_lifecycle.rb | 3 | ||||
-rw-r--r-- | help/test/factories.rb | 14 | ||||
-rw-r--r-- | help/test/functional/tickets_controller_test.rb | 4 | ||||
-rw-r--r-- | help/test/unit/account_extension_test.rb | 12 | ||||
-rw-r--r-- | help/test/unit/ticket_comment_test.rb | 2 | ||||
-rw-r--r-- | help/test/unit/ticket_test.rb | 48 |
14 files changed, 85 insertions, 47 deletions
diff --git a/help/Gemfile b/help/Gemfile index 5e895e9..ad7d29b 100644 --- a/help/Gemfile +++ b/help/Gemfile @@ -1,4 +1,4 @@ -source "http://rubygems.org" +source "https://rubygems.org" eval(File.read(File.dirname(__FILE__) + '/../common_dependencies.rb')) eval(File.read(File.dirname(__FILE__) + '/..//ui_dependencies.rb')) diff --git a/help/app/assets/javascripts/tickets.js b/help/app/assets/javascripts/tickets.js index bf7965c..18537aa 100644 --- a/help/app/assets/javascripts/tickets.js +++ b/help/app/assets/javascripts/tickets.js @@ -1,4 +1,4 @@ //$(document).ready(function () { // $.fn.editable.defaults.mode = 'inline'; -// $('#title').editable(); +// $('#subject').editable(); //});
\ No newline at end of file diff --git a/help/app/controllers/tickets_controller.rb b/help/app/controllers/tickets_controller.rb index a669e19..c193ff4 100644 --- a/help/app/controllers/tickets_controller.rb +++ b/help/app/controllers/tickets_controller.rb @@ -62,14 +62,11 @@ class TicketsController < ApplicationController @ticket.comments.last.private = false unless admin? end - if @ticket.changed? - if @ticket.save - flash[:notice] = t(:changes_saved) - redirect_to_tickets - else - respond_with @ticket - end + if @ticket.changed? and @ticket.save + flash[:notice] = t(:changes_saved) + redirect_to_tickets else + flash[:error] = @ticket.errors.full_messages.join(". ") if @ticket.changed? redirect_to auto_ticket_path(@ticket) end end diff --git a/help/app/models/account_extension/tickets.rb b/help/app/models/account_extension/tickets.rb new file mode 100644 index 0000000..f898b56 --- /dev/null +++ b/help/app/models/account_extension/tickets.rb @@ -0,0 +1,13 @@ +module AccountExtension::Tickets + extend ActiveSupport::Concern + + def destroy_with_tickets + Ticket.destroy_all_from(self.user) + destroy_without_tickets + end + + included do + alias_method_chain :destroy, :tickets + end + +end diff --git a/help/app/models/ticket.rb b/help/app/models/ticket.rb index 8066d0d..cd22758 100644 --- a/help/app/models/ticket.rb +++ b/help/app/models/ticket.rb @@ -12,7 +12,7 @@ class Ticket < CouchRest::Model::Base property :created_by, String, :protected => true # nil for anonymous tickets, should never be changed property :regarding_user, String # may be nil or valid username - property :title, String + property :subject, String property :email, String property :is_open, TrueClass, :default => true property :comments, [TicketComment] @@ -24,6 +24,7 @@ class Ticket < CouchRest::Model::Base design do view :by_updated_at view :by_created_at + view :by_created_by view :by_is_open_and_created_at view :by_is_open_and_updated_at @@ -32,7 +33,7 @@ class Ticket < CouchRest::Model::Base load_views(own_path.join('..', 'designs', 'ticket')) end - validates :title, :presence => true + validates :subject, :presence => true validates :email, :allow_blank => true, :format => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/ def self.search(options = {}) @@ -40,6 +41,12 @@ class Ticket < CouchRest::Model::Base @selection.tickets end + def self.destroy_all_from(user) + self.by_created_by.key(user.id).each do |ticket| + ticket.destroy + end + end + def is_creator_validated? !!created_by end diff --git a/help/app/views/tickets/_edit_form.html.haml b/help/app/views/tickets/_edit_form.html.haml index 5252c2e..714f8ff 100644 --- a/help/app/views/tickets/_edit_form.html.haml +++ b/help/app/views/tickets/_edit_form.html.haml @@ -1,7 +1,7 @@ :ruby # created by user link if @ticket.created_by_user - created_by = link_to(@ticket.created_by_user.login, user_overview_path(@ticket.created_by_user)) + created_by = link_to @ticket.created_by_user.login, @ticket.created_by_user else created_by = t(:anonymous) end @@ -9,7 +9,7 @@ # regarding user link if admin? if @ticket.regarding_user_actual_user - regarding_user_link = link_to @ticket.regarding_user_actual_user.login, user_overview_path(@ticket.regarding_user_actual_user) + regarding_user_link = link_to @ticket.regarding_user_actual_user.login, @ticket.regarding_user_actual_user else regarding_user_link = "(#{t(:unknown)})" end @@ -26,7 +26,7 @@ %span.label.label-success= t(:closed) %span.label.label-clear= t(:created_by_on, :user => created_by, :time => @ticket.created_at.to_s(:short)).html_safe %div= t(:subject) - = f.text_field :title, :class => 'large full-width' + = f.text_field :subject, :class => 'large full-width' .row-fluid .span4 %div= t(:status) diff --git a/help/app/views/tickets/_ticket.html.haml b/help/app/views/tickets/_ticket.html.haml index a064c4e..5bc33c8 100644 --- a/help/app/views/tickets/_ticket.html.haml +++ b/help/app/views/tickets/_ticket.html.haml @@ -1,6 +1,6 @@ - url = auto_ticket_path(ticket) %tr - %td= link_to ticket.title, url + %td= link_to ticket.subject, url %td= link_to ticket.created_at.to_s(:short), url %td= link_to ticket.updated_at.to_s(:short), url %td= ticket.commenters diff --git a/help/app/views/tickets/new.html.haml b/help/app/views/tickets/new.html.haml index c0a343d..393e5d6 100644 --- a/help/app/views/tickets/new.html.haml +++ b/help/app/views/tickets/new.html.haml @@ -11,7 +11,7 @@ = simple_form_for @ticket, :validate => true, :html => {:class => 'form-horizontal'} do |f| = hidden_ticket_fields - = f.input :title, :label => t(:subject) + = f.input :subject - if logged_in? = f.input :email, input_html: {value: email} = f.input :regarding_user, input_html: {value: regarding} diff --git a/help/config/initializers/account_lifecycle.rb b/help/config/initializers/account_lifecycle.rb new file mode 100644 index 0000000..d9f04c1 --- /dev/null +++ b/help/config/initializers/account_lifecycle.rb @@ -0,0 +1,3 @@ +ActiveSupport.on_load(:account) do + include AccountExtension::Tickets +end diff --git a/help/test/factories.rb b/help/test/factories.rb index 5b38952..be04f15 100644 --- a/help/test/factories.rb +++ b/help/test/factories.rb @@ -1,9 +1,17 @@ FactoryGirl.define do factory :ticket do - title { Faker::Lorem.sentence } - comments_attributes do - { "0" => { "body" => Faker::Lorem.sentences.join(" ") } } + subject { Faker::Lorem.sentence } + email { Faker::Internet.email } + + factory :ticket_with_comment do + comments_attributes do + { "0" => { "body" => Faker::Lorem.sentences.join(" ") } } + end + end + + factory :ticket_with_creator do + created_by { FactoryGirl.create(:user).id } end end diff --git a/help/test/functional/tickets_controller_test.rb b/help/test/functional/tickets_controller_test.rb index 3747ad0..0f56e6e 100644 --- a/help/test/functional/tickets_controller_test.rb +++ b/help/test/functional/tickets_controller_test.rb @@ -53,7 +53,7 @@ class TicketsControllerTest < ActionController::TestCase end test "should create unauthenticated ticket" do - params = {:title => "unauth ticket test title", :comments_attributes => {"0" => {"body" =>"body of test ticket"}}} + params = {:subject => "unauth ticket test subject", :comments_attributes => {"0" => {"body" =>"body of test ticket"}}} assert_difference('Ticket.count') do post :create, :ticket => params @@ -70,7 +70,7 @@ class TicketsControllerTest < ActionController::TestCase test "should create authenticated ticket" do - params = {:title => "auth ticket test title", :comments_attributes => {"0" => {"body" =>"body of test ticket"}}} + params = {:subject => "auth ticket test subject", :comments_attributes => {"0" => {"body" =>"body of test ticket"}}} login diff --git a/help/test/unit/account_extension_test.rb b/help/test/unit/account_extension_test.rb new file mode 100644 index 0000000..aba162c --- /dev/null +++ b/help/test/unit/account_extension_test.rb @@ -0,0 +1,12 @@ +require 'test_helper' + +class AccountExtensionTest < ActiveSupport::TestCase + + test "destroying an account triggers ticket destruction" do + t = FactoryGirl.create :ticket_with_creator + u = t.created_by_user + Account.new(u).destroy + assert_equal nil, Ticket.find(t.id) + end + +end diff --git a/help/test/unit/ticket_comment_test.rb b/help/test/unit/ticket_comment_test.rb index 44865ed..fe8cc95 100644 --- a/help/test/unit/ticket_comment_test.rb +++ b/help/test/unit/ticket_comment_test.rb @@ -36,7 +36,7 @@ class TicketCommentTest < ActiveSupport::TestCase =end test "add comments" do - testticket = Ticket.create :title => "testing" + testticket = Ticket.create :subject => "testing" assert_equal testticket.comments.count, 0 comment = TicketComment.new :body => "my email broke" #assert comment.valid? #validating or saving necessary for setting posted_at diff --git a/help/test/unit/ticket_test.rb b/help/test/unit/ticket_test.rb index ce35e1d..f5e6ea7 100644 --- a/help/test/unit/ticket_test.rb +++ b/help/test/unit/ticket_test.rb @@ -1,57 +1,55 @@ require 'test_helper' class TicketTest < ActiveSupport::TestCase - #test "the truth" do - # assert true - #end - setup do - @sample = Ticket.new + test "ticket with default attribs is valid" do + t = FactoryGirl.build :ticket + assert t.valid? end - test "validity" do - t = Ticket.create :title => 'test title', :email => 'blah@blah.com' + test "ticket without email is valid" do + t = FactoryGirl.build :ticket, email: "" assert t.valid? - assert_equal t.title, 'test title' + end + test "ticket validates email format" do + t = FactoryGirl.build :ticket, email: "aswerssfd" + assert !t.valid? + end + + test "ticket open states" do + t = FactoryGirl.build :ticket assert t.is_open t.close assert !t.is_open t.reopen assert t.is_open - #user = LeapWebHelp::User.new(User.valid_attributes_hash) - #user = LeapWebUsers::User.create - - #t.user = user - - #t.email = '' #invalid - #assert !t.valid? - #t.email = 'blah@blah.com, bb@jjj.org' - #assert t.valid? - t.email = 'bdlfjlkasfjklasjf' #invalid - #p t.email_address - #p t.email_address.strip =~ RFC822::EmailAddress - assert !t.valid? - t.reload.destroy end test "creation validated" do + @sample = Ticket.new assert !@sample.is_creator_validated? #p current_user @sample.created_by = 22 #current_user assert @sample.is_creator_validated? end + test "destroy all tickets from a user" do + t = FactoryGirl.create :ticket_with_creator + u = t.created_by_user + Ticket.destroy_all_from(u) + assert_equal nil, Ticket.find(t.id) + end =begin # TODO: do once have current_user stuff in order test "code if & only if not creator-validated" do User.current_test = nil - t1 = Ticket.create :title => 'test title' + t1 = Ticket.create :subject => 'test title' assert_not_nil t1.code assert_nil t1.created_by User.current_test = 4 - t2 = Ticket.create :title => 'test title' + t2 = Ticket.create :subject => 'test title' assert_nil t2.code assert_not_nil t2.created_by end @@ -66,7 +64,7 @@ class TicketTest < ActiveSupport::TestCase # TODO: the by_includes_post_by view is only used for tests. Maybe we should get rid of it and change the test to including ordering? - testticket = Ticket.create :title => "test retrieving commented tickets" + testticket = Ticket.create :subject => "test retrieving commented tickets" comment = TicketComment.new :body => "my email broke", :posted_by => "123" assert_equal 0, testticket.comments.count assert_equal [], Ticket.by_includes_post_by.key('123').all |