task_test.rb 15.1 KB
require File.dirname(__FILE__) + '/test_helper'

class TasksTest < ActiveSupport::TestCase

  def setup
    login_api
    @person = user.person
    @community = fast_create(Community)
    @environment = Environment.default
  end

  attr_accessor :person, :community, :environment

  should 'list tasks of environment' do
    task = create(Task, :requestor => person, :target => environment)
    get "/api/v1/tasks?#{params.to_query}"
    json = JSON.parse(last_response.body)
    assert_includes json["tasks"].map { |a| a["id"] }, task.id
  end

  should 'return environment task by id' do
    environment.add_admin(person)
    task = create(Task, :requestor => person, :target => environment)
    get "/api/v1/tasks/#{task.id}?#{params.to_query}"
    json = JSON.parse(last_response.body)
    assert_equal task.id, json["task"]["id"]
  end

#  should 'not return environmet task if user has no permission to view it' do
#    person = fast_create(Person)
#    task = create(Task, :requestor => person, :target => environment)
#
#    get "/api/v1/tasks/#{task.id}?#{params.to_query}"
#    assert_equal 403, last_response.status
#  end
#
#  #############################
#  #     Community Tasks    #
#  #############################
#
#  should 'return task by community' do
#    community = fast_create(Community)
#    task = create(Task, :requestor => person, :target => community)
#    get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}"
#    json = JSON.parse(last_response.body)
#    assert_equal task.id, json["task"]["id"]
#  end
#
#  should 'not return task by community if user has no permission to view it' do
#    community = fast_create(Community)
#    task = create(Task, :requestor => person, :target => community)
#    assert !person.is_member_of?(community)
#
#    get "/api/v1/communities/#{community.id}/tasks/#{task.id}?#{params.to_query}"
#    assert_equal 403, last_response.status
#  end
#
##  should 'not list forbidden article when listing articles by community' do
##    community = fast_create(Community)
##    article = fast_create(Article, :profile_id => community.id, :name => "Some thing", :published => false)
##    assert !article.published?
##
##    get "/api/v1/communities/#{community.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_not_includes json['articles'].map {|a| a['id']}, article.id
##  end
#
#  should 'create task in a community' do
#    community = fast_create(Community)
#    give_permission(person, 'post_content', community)
#    post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}"
#    json = JSON.parse(last_response.body)
#    assert_not_nil json["task"]["id"]
#  end
#
#  should 'do not create article if user has no permission to post content' do
#assert false
##    community = fast_create(Community)
##    give_permission(user.person, 'invite_members', community)
##    params[:article] = {:name => "Title"}
##    post "/api/v1/communities/#{community.id}/articles?#{params.to_query}"
##    assert_equal 403, last_response.status
#  end
#
##  should 'create article with parent' do
##    community = fast_create(Community)
##    community.add_member(user.person)
##    article = fast_create(Article)
##
##    params[:article] = {:name => "Title", :parent_id => article.id}
##    post "/api/v1/communities/#{community.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal article.id, json["article"]["parent"]["id"]
##  end
#
#  should 'create task defining the requestor as current profile logged in' do
#    community = fast_create(Community)
#    community.add_member(person)
#
#    post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}"
#    json = JSON.parse(last_response.body)
#    
#    assert_equal person, Task.last.requestor
#  end
#
#  should 'create task defining the target as the community' do
#    community = fast_create(Community)
#    community.add_member(person)
#
#    post "/api/v1/communities/#{community.id}/tasks?#{params.to_query}"
#    json = JSON.parse(last_response.body)
#    
#    assert_equal community, Task.last.target
#  end
#
##  #############################
##  #       Person Articles     #
##  #############################
##
##  should 'return article by person' do
##    person = fast_create(Person)
##    article = fast_create(Article, :profile_id => person.id, :name => "Some thing")
##    get "/api/v1/people/#{person.id}/articles/#{article.id}?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal article.id, json["article"]["id"]
##  end
##
##  should 'not return article by person if user has no permission to view it' do
##    person = fast_create(Person)
##    article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false)
##    assert !article.published?
##
##    get "/api/v1/people/#{person.id}/articles/#{article.id}?#{params.to_query}"
##    assert_equal 403, last_response.status
##  end
##
##  should 'not list forbidden article when listing articles by person' do
##    person = fast_create(Person)
##    article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false)
##    assert !article.published?
##    get "/api/v1/people/#{person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_not_includes json['articles'].map {|a| a['id']}, article.id
##  end
##
##  should 'create article in a person' do
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal "Title", json["article"]["title"]
##  end
##
##  should 'person do not create article if user has no permission to post content' do
##    person = fast_create(Person)
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{person.id}/articles?#{params.to_query}"
##    assert_equal 403, last_response.status
##  end
##
##  should 'person create article with parent' do
##    article = fast_create(Article)
##
##    params[:article] = {:name => "Title", :parent_id => article.id}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal article.id, json["article"]["parent"]["id"]
##  end
##
##  should 'person create article with content type passed as parameter' do
##    Article.delete_all
##    params[:article] = {:name => "Title"}
##    params[:content_type] = 'TextArticle'
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_kind_of TextArticle, Article.last
##  end
##  
##  should 'person create article of TinyMceArticle type if no content type is passed as parameter' do
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_kind_of TinyMceArticle, Article.last
##  end
##
##  should 'person not create article with invalid article content type' do
##    params[:article] = {:name => "Title"}
##    params[:content_type] = 'Person'
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal 403, last_response.status
##  end
##
##  should 'person create article defining the correct profile' do
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal user.person, Article.last.profile
##  end
##
##  should 'person create article defining the created_by' do
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal user.person, Article.last.created_by
##  end
##
##  should 'person create article defining the last_changed_by' do
##    params[:article] = {:name => "Title"}
##    post "/api/v1/people/#{user.person.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal user.person, Article.last.last_changed_by
##  end
##
##  #############################
##  #     Enterprise Articles    #
##  #############################
##
##  should 'return article by enterprise' do
##    enterprise = fast_create(Enterprise)
##    article = fast_create(Article, :profile_id => enterprise.id, :name => "Some thing")
##    get "/api/v1/enterprises/#{enterprise.id}/articles/#{article.id}?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal article.id, json["article"]["id"]
##  end
##
##  should 'not return article by enterprise if user has no permission to view it' do
##    enterprise = fast_create(Enterprise)
##    article = fast_create(Article, :profile_id => enterprise.id, :name => "Some thing", :published => false)
##    assert !article.published?
##
##    get "/api/v1/enterprises/#{enterprise.id}/articles/#{article.id}?#{params.to_query}"
##    assert_equal 403, last_response.status
##  end
##
##  should 'not list forbidden article when listing articles by enterprise' do
##    enterprise = fast_create(Enterprise)
##    article = fast_create(Article, :profile_id => enterprise.id, :name => "Some thing", :published => false)
##    assert !article.published?
##
##    get "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_not_includes json['articles'].map {|a| a['id']}, article.id
##  end
##
##  should 'create article in a enterprise' do
##    enterprise = fast_create(Enterprise)
##    give_permission(user.person, 'post_content', enterprise)
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal "Title", json["article"]["title"]
##  end
##
##  should 'enterprise: do not create article if user has no permission to post content' do
##    enterprise = fast_create(Enterprise)
##    give_permission(user.person, 'invite_members', enterprise)
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    assert_equal 403, last_response.status
##  end
##
##  should 'enterprise: create article with parent' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##    article = fast_create(Article)
##
##    params[:article] = {:name => "Title", :parent_id => article.id}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal article.id, json["article"]["parent"]["id"]
##  end
##
##  should 'enterprise: create article with content type passed as parameter' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    Article.delete_all
##    params[:article] = {:name => "Title"}
##    params[:content_type] = 'TextArticle'
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_kind_of TextArticle, Article.last
##  end
##  
##  should 'enterprise: create article of TinyMceArticle type if no content type is passed as parameter' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_kind_of TinyMceArticle, Article.last
##  end
##
##  should 'enterprise: not create article with invalid article content type' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    params[:article] = {:name => "Title"}
##    params[:content_type] = 'Person'
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal 403, last_response.status
##  end
##
##  should 'enterprise: create article defining the correct profile' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal enterprise, Article.last.profile
##  end
##
##  should 'enterprise: create article defining the created_by' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal user.person, Article.last.created_by
##  end
##
##  should 'enterprise: create article defining the last_changed_by' do
##    enterprise = fast_create(Enterprise)
##    enterprise.add_member(user.person)
##
##    params[:article] = {:name => "Title"}
##    post "/api/v1/enterprises/#{enterprise.id}/articles?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    
##    assert_equal user.person, Article.last.last_changed_by
##  end
##
##  should 'list article children with partial fields' do
##    article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
##    child1 = fast_create(Article, :parent_id => article.id, :profile_id => user.person.id, :name => "Some thing")
##    params[:fields] = [:title]
##    get "/api/v1/articles/#{article.id}/children?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal ['title'], json['articles'].first.keys
##  end
##
##  should 'suggest article children' do
##    article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
##    params[:target_id] = user.person.id
##    params[:article] = {:name => "Article name", :body => "Article body"}
##    assert_difference "SuggestArticle.count" do
##      post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}"
##    end
##    json = JSON.parse(last_response.body)
##    assert_equal 'SuggestArticle', json['type']
##  end
##
##  should 'suggest event children' do
##    article = fast_create(Article, :profile_id => user.person.id, :name => "Some thing")
##    params[:target_id] = user.person.id
##    params[:article] = {:name => "Article name", :body => "Article body", :type => "Event"}
##    assert_difference "SuggestArticle.count" do
##      post "/api/v1/articles/#{article.id}/children/suggest?#{params.to_query}"
##    end
##    json = JSON.parse(last_response.body)
##    assert_equal 'SuggestArticle', json['type']
##  end
##
##  should 'update hit attribute of article children' do
##    a1 = fast_create(Article, :profile_id => user.person.id)
##    a2 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id)
##    a3 = fast_create(Article, :parent_id => a1.id, :profile_id => user.person.id)
##    get "/api/v1/articles/#{a1.id}/children?#{params.to_query}"
##    json = JSON.parse(last_response.body)
##    assert_equal [1, 1], json['articles'].map { |a| a['hits']}
##    assert_equal [0, 1, 1], [a1.reload.hits, a2.reload.hits, a3.reload.hits]
##  end
##
end