Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-25 10:40:28 +01:00
250 Zeilen
Kein EOL
6,1 KiB
Ruby
250 Zeilen
Kein EOL
6,1 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe CustomWizard::Mapper do
|
|
fab!(:user1) {
|
|
Fabricate(:user,
|
|
name: "Angus",
|
|
username: "angus",
|
|
email: "angus@email.com",
|
|
trust_level: TrustLevel[3]
|
|
)
|
|
}
|
|
fab!(:user2) {
|
|
Fabricate(:user,
|
|
name: "Patrick",
|
|
username: "patrick",
|
|
email: "patrick@email2.com",
|
|
trust_level: TrustLevel[1]
|
|
)
|
|
}
|
|
fab!(:user_field) {
|
|
field = Fabricate(:user_field,
|
|
id: 3,
|
|
name: 'dropdown_field',
|
|
description: 'field desc',
|
|
field_type: 'dropdown',
|
|
user_field_options_attributes: [
|
|
{ value: "a" },
|
|
{ value: "b" },
|
|
{ value: "c" }
|
|
]
|
|
)
|
|
}
|
|
let(:inputs) {
|
|
JSON.parse(File.open(
|
|
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/mapper/inputs.json"
|
|
).read)
|
|
}
|
|
let(:data) {
|
|
JSON.parse(File.open(
|
|
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/mapper/data.json"
|
|
).read)
|
|
}
|
|
|
|
it "maps values" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq([13])
|
|
end
|
|
|
|
it "maps associations" do
|
|
association = CustomWizard::Mapper.new(
|
|
inputs: inputs['association'],
|
|
data: data,
|
|
user: user1
|
|
).perform
|
|
expect(association.length).to eq(3)
|
|
expect(association.first[:value]).to eq("Choice 1")
|
|
end
|
|
|
|
context "conditional mapping" do
|
|
it "maps when the condition is met" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['conditional'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("true")
|
|
end
|
|
|
|
it "does not map when the condition is not met" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['conditional'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(nil)
|
|
end
|
|
|
|
it "maps when multiple conditions are met" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['conditional_multiple_pairs'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("true")
|
|
end
|
|
|
|
it "does not map when one of multiple conditions are not met" do
|
|
user1.email = "angus@other-email.com"
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['conditional_multiple_pairs'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(nil)
|
|
end
|
|
end
|
|
|
|
it "validates valid data" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['validation'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(true)
|
|
end
|
|
|
|
it "does not validate invalid data" do
|
|
data["input_2"] = "value 3"
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['validation'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(false)
|
|
end
|
|
|
|
it "maps text fields" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment_text'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("Value")
|
|
end
|
|
|
|
it "maps user fields" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment_user_field'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("Angus")
|
|
end
|
|
|
|
it "maps user field options" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment_user_field_options'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(["a", "b", "c"])
|
|
end
|
|
|
|
it "maps wizard fields" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment_wizard_field'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("value 1")
|
|
end
|
|
|
|
it "maps wizard actions" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['assignment_wizard_action'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("value 2")
|
|
end
|
|
|
|
it "interpolates user fields" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['interpolate_user_field'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("Name: Angus")
|
|
end
|
|
|
|
it "interpolates wizard fields" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['interpolate_wizard_field'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("Input 1: value 1")
|
|
end
|
|
|
|
it "interpolates date" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['interpolate_timestamp'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq("Time: #{Time.now.strftime("%B %-d, %Y")}")
|
|
end
|
|
|
|
it "handles greater than pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['greater_than_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(true)
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['greater_than_pair'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(false)
|
|
end
|
|
|
|
it "handles less than pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['less_than_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(false)
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['less_than_pair'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(true)
|
|
end
|
|
|
|
it "handles greater than or equal pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['greater_than_or_equal_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(true)
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['greater_than_or_equal_pair'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(true)
|
|
end
|
|
|
|
it "handles less than or equal pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['less_than_or_equal_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(true)
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['less_than_or_equal_pair'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(true)
|
|
end
|
|
|
|
it "handles regex pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['regex_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(true)
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['regex_pair'],
|
|
data: data,
|
|
user: user2
|
|
).perform).to eq(false)
|
|
end
|
|
|
|
it "handles shorthand pairs" do
|
|
expect(CustomWizard::Mapper.new(
|
|
inputs: inputs['shorthand_pair'],
|
|
data: data,
|
|
user: user1
|
|
).perform).to eq(false)
|
|
end
|
|
end |