Skip to content

Commit

Permalink
Merge pull request #202 from zendesk/ytang/rule-helper-methods
Browse files Browse the repository at this point in the history
Add helper methods for configuring Views
  • Loading branch information
shanitang committed Dec 13, 2014
2 parents a52eef2 + 350d0f2 commit f5406fc
Show file tree
Hide file tree
Showing 5 changed files with 324 additions and 0 deletions.
52 changes: 52 additions & 0 deletions lib/zendesk_api/resources.rb
Expand Up @@ -465,28 +465,80 @@ def attributes_for_save
end
end

module Conditions
def all_conditions=(all_conditions)
self.conditions ||= {}
self.conditions[:all] = all_conditions
end

def any_conditions=(any_conditions)
self.conditions ||= {}
self.conditions[:any] = any_conditions
end

def add_all_condition(field, operator, value)
self.conditions ||= {}
self.conditions[:all] ||= []
self.conditions[:all] << { :field => field, :operator => operator, :value => value }
end

def add_any_condition(field, operator, value)
self.conditions ||= {}
self.conditions[:any] ||= []
self.conditions[:any] << { :field => field, :operator => operator, :value => value }
end
end

module Actions
def add_action(field, value)
self.actions ||= []
self.actions << { :field => field, :value => value }
end
end

class View < Rule
include Conditions

has_many :tickets, :class => Ticket
has_many :feed, :class => Ticket, :path => "feed"

has_many :rows, :class => ViewRow, :path => "execute"
has :execution, :class => RuleExecution
has ViewCount, :path => "count"

def add_column(column)
columns = execution.columns.map(&:id)
columns << column
self.columns = columns
end

def columns=(columns)
self.output ||= {}
self.output[:columns] = columns
end

def self.preview(client, options = {})
Collection.new(client, ViewRow, options.merge(:path => "views/preview", :verb => :post))
end
end

class Trigger < Rule
include Conditions
include Actions

has :execution, :class => RuleExecution
end

class Automation < Rule
include Conditions
include Actions

has :execution, :class => RuleExecution
end

class Macro < Rule
include Actions

has :execution, :class => RuleExecution

# Returns the update to a ticket that happens when a macro will be applied.
Expand Down
81 changes: 81 additions & 0 deletions spec/core/resources/automation_spec.rb
@@ -0,0 +1,81 @@
require 'core/spec_helper'

describe ZendeskAPI::Automation do
def valid_attributes
{
:title => "my test automation",
:conditions => {
:any => [{ :field => "assignee_id", :operator => "is", :value => 1}],
:all => [{ :field => "status", :operator => "is", :value => "open" }]
},
:actions => [{ :field => "priority", :value => "urgent" }],
}
end

subject do
described_class.new(double, valid_attributes)
end

describe "#all_conditions=" do
it "should assign new values to all conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.all_conditions = new_conditions

expect(subject.conditions[:all]).to eq(new_conditions)
end
end

describe "#any_conditions=" do
it "should assign new values to any conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.any_conditions = new_conditions

expect(subject.conditions[:any]).to eq(new_conditions)
end
end

describe "#add_all_condition" do
it "should add a condition to all condition" do
new_condition = { :field => "type", :operator => "is", :value => "problem" }
existing_conditions = subject.conditions[:all]

expect(existing_conditions).not_to include(new_condition)

subject.add_all_condition("type", "is", "problem")

expect(subject.conditions[:all]).to eq(existing_conditions << new_condition)
end
end

describe "#add_any_condition" do
it "should add a condition to any condition" do
new_condition = { :field => "type", :operator => "is", :value => "task" }
existing_conditions = subject.conditions[:any]

expect(existing_conditions).not_to include(new_condition)

subject.add_any_condition("type", "is", "task")

expect(subject.conditions[:any]).to eq(existing_conditions << new_condition)
end
end

describe "#add_action" do
it "should add an action to the current actions" do
new_action = { :field => "status", :value => "solved" }
existing_actions = subject.actions

expect(existing_actions).not_to include(new_action)

subject.add_action("status", "solved")

expect(subject.actions).to eq(existing_actions << new_action)
end
end
end
27 changes: 27 additions & 0 deletions spec/core/resources/macro_spec.rb
@@ -0,0 +1,27 @@
require 'core/spec_helper'

describe ZendeskAPI::Macro do
def valid_attributes
{
:title => "my test macro",
:actions => [{ :field => "priority", :value => "urgent" }],
}
end

subject do
described_class.new(double, valid_attributes)
end

describe "#add_action" do
it "should add an action to the current actions" do
new_action = { :field => "status", :value => "solved" }
existing_actions = subject.actions

expect(existing_actions).not_to include(new_action)

subject.add_action("status", "solved")

expect(subject.actions).to eq(existing_actions << new_action)
end
end
end
67 changes: 67 additions & 0 deletions spec/core/resources/trigger_spec.rb
@@ -0,0 +1,67 @@
require 'core/spec_helper'

describe ZendeskAPI::Trigger do
def valid_attributes
{
:title => "my test trigger",
:conditions => {
:any => [{ :field => "assignee_id", :operator => "is", :value => 1}],
:all => [{ :field => "status", :operator => "is", :value => "open" }]
},
}
end

subject do
described_class.new(double, valid_attributes)
end

describe "#all_conditions=" do
it "should assign new values to all conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.all_conditions = new_conditions

expect(subject.conditions[:all]).to eq(new_conditions)
end
end

describe "#any_conditions=" do
it "should assign new values to any conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.any_conditions = new_conditions

expect(subject.conditions[:any]).to eq(new_conditions)
end
end

describe "#add_all_condition" do
it "should add a condition to all condition" do
new_condition = { :field => "type", :operator => "is", :value => "problem" }
existing_conditions = subject.conditions[:all]

expect(existing_conditions).not_to include(new_condition)

subject.add_all_condition("type", "is", "problem")

expect(subject.conditions[:all]).to eq(existing_conditions << new_condition)
end
end

describe "#add_any_condition" do
it "should add a condition to any condition" do
new_condition = { :field => "type", :operator => "is", :value => "task" }
existing_conditions = subject.conditions[:any]

expect(existing_conditions).not_to include(new_condition)

subject.add_any_condition("type", "is", "task")

expect(subject.conditions[:any]).to eq(existing_conditions << new_condition)
end
end
end
97 changes: 97 additions & 0 deletions spec/core/resources/view_spec.rb
@@ -0,0 +1,97 @@
require 'core/spec_helper'

describe ZendeskAPI::View do
def valid_attributes
{
:title => "my test view",
:conditions => {
:any => [{ :field => "assignee_id", :operator => "is", :value => 1}],
:all => [{ :field => "status", :operator => "is", :value => "open" }]
},
:execution => {
:columns => [:id => "status", :title=> "Status"]
}
}
end

subject do
described_class.new(double, valid_attributes)
end

describe "#columns=" do
it "should add a single column" do
new_column = ["priority"]
subject.columns = new_column

expect(subject.output["columns"]).to eq(new_column)
end

it "should set columns on output" do
new_columns = ["type", "priority"]
subject.columns = new_columns

expect(subject.output["columns"]).to eq(new_columns)
end
end

describe "#add_column" do
it "should add a column to the existing columns" do
existing_columns = subject.execution.columns.map {|c| c["id"]}
expect(existing_columns.include?("type")).to eq(false)

subject.add_column("type")

expect(subject.output["columns"]).to eq(existing_columns << "type")
end
end

describe "#all_conditions=" do
it "should assign new values to all conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.all_conditions = new_conditions

expect(subject.conditions[:all]).to eq(new_conditions)
end
end

describe "#any_conditions=" do
it "should assign new values to any conditions" do
new_conditions = [
{ "field" => "type", "operator" => "is", "value" => "question" },
{ "field" => "status", "operator" => "less_than", "value" => "solved" }
]
subject.any_conditions = new_conditions

expect(subject.conditions[:any]).to eq(new_conditions)
end
end

describe "#add_all_condition" do
it "should add a condition to all condition" do
new_condition = { :field => "type", :operator => "is", :value => "problem" }
existing_conditions = subject.conditions[:all]

expect(existing_conditions).not_to include(new_condition)

subject.add_all_condition("type", "is", "problem")

expect(subject.conditions[:all]).to eq(existing_conditions << new_condition)
end
end

describe "#add_any_condition" do
it "should add a condition to any condition" do
new_condition = { :field => "type", :operator => "is", :value => "task" }
existing_conditions = subject.conditions[:any]

expect(existing_conditions).not_to include(new_condition)

subject.add_any_condition("type", "is", "task")

expect(subject.conditions[:any]).to eq(existing_conditions << new_condition)
end
end
end

0 comments on commit f5406fc

Please sign in to comment.