diff --git a/.github/workflows/discourse-plugin.yml b/.github/workflows/discourse-plugin.yml
index f5cf62e5..13850e3e 100644
--- a/.github/workflows/discourse-plugin.yml
+++ b/.github/workflows/discourse-plugin.yml
@@ -5,6 +5,8 @@ on:
branches:
- main
pull_request:
+ schedule:
+ - cron: "0 0 * * *"
jobs:
ci:
diff --git a/README.md b/README.md
index 0190f16e..0c454685 100644
--- a/README.md
+++ b/README.md
@@ -4,22 +4,24 @@ The Custom Wizard Plugin lets you make forms for your Discourse forum. Better us
+👋 Looking to report an issue? We're managing issues for this plugin using our [bug report wizard](https://coop.pavilion.tech/w/bug-report).
+
## Install
If you're not sure how to install a plugin in Discourse, please follow the [plugin installation guide](https://meta.discourse.org/t/install-a-plugin/19157) or contact your Discourse hosting provider.
## Documentation
-[Read the full documentation here](https://discourse.pluginmanager.org/c/discourse-custom-wizard/documentation), or go directly to the relevant section
+[Read the full documentation here](https://coop.pavilion.tech/c/82), or go directly to the relevant section
-- [Wizard Administration](https://discourse.pluginmanager.org/t/wizard-administration)
-- [Wizard Settings](https://discourse.pluginmanager.org/t/wizard-settings)
-- [Step Settings](https://discourse.pluginmanager.org/t/step-settings)
-- [Field Settings](https://discourse.pluginmanager.org/t/field-settings)
-- [Conditional Settings](https://discourse.pluginmanager.org/t/conditional-settings)
-- [Field Interpolation](https://discourse.pluginmanager.org/t/field-interpolation)
-- [Wizard Examples and Templates](https://discourse.pluginmanager.org/t/wizard-examples-and-templates)
+- [Wizard Administration](https://coop.pavilion.tech/t/1602)
+- [Wizard Settings](https://coop.pavilion.tech/t/1614)
+- [Step Settings](https://coop.pavilion.tech/t/1735)
+- [Field Settings](https://coop.pavilion.tech/t/1580)
+- [Conditional Settings](https://coop.pavilion.tech/t/1673)
+- [Field Interpolation](https://coop.pavilion.tech/t/1557)
+- [Handling Dates and Times](https://coop.pavilion.tech/t/1708)
## Support
-- [Report a bug](https://discourse.pluginmanager.org/w/bug-report)
+- [Report an issue](https://coop.pavilion.tech/w/bug-report)
diff --git a/app/controllers/custom_wizard/admin/admin.rb b/app/controllers/custom_wizard/admin/admin.rb
index 867be56c..aa8862b6 100644
--- a/app/controllers/custom_wizard/admin/admin.rb
+++ b/app/controllers/custom_wizard/admin/admin.rb
@@ -8,7 +8,7 @@ class CustomWizard::AdminController < ::Admin::AdminController
subscribed: subcription.subscribed?,
subscription_type: subcription.type,
subscription_attributes: CustomWizard::Subscription.attributes,
- subscription_client_installed: subcription.client_installed?
+ subscription_client_installed: CustomWizard::Subscription.client_installed?
)
end
diff --git a/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6 b/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6
index 2d13e703..c974fafb 100644
--- a/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6
+++ b/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6
@@ -69,7 +69,10 @@ export default {
},
_wizardInsertText(text, options) {
- if (this.session.wizardEventFieldId === this.fieldId) {
+ if (
+ this.session.wizardEventFieldId === this.fieldId &&
+ this.element
+ ) {
this.insertText(text, options);
}
},
diff --git a/assets/javascripts/discourse/lib/wizard-mapper.js.es6 b/assets/javascripts/discourse/lib/wizard-mapper.js.es6
index c398eaf4..9037bec5 100644
--- a/assets/javascripts/discourse/lib/wizard-mapper.js.es6
+++ b/assets/javascripts/discourse/lib/wizard-mapper.js.es6
@@ -35,6 +35,7 @@ function inputTypesContent(options = {}) {
const connectors = {
pair: [
"equal",
+ "not_equal",
"greater",
"less",
"greater_or_equal",
diff --git a/assets/javascripts/discourse/lib/wizard-schema.js.es6 b/assets/javascripts/discourse/lib/wizard-schema.js.es6
index 4eeee276..1ba806f6 100644
--- a/assets/javascripts/discourse/lib/wizard-schema.js.es6
+++ b/assets/javascripts/discourse/lib/wizard-schema.js.es6
@@ -250,6 +250,7 @@ const custom_field = {
export function buildFieldTypes(types) {
wizardSchema.field.types = types;
+ wizardSchema.field.type = Object.keys(types);
}
field.type = Object.keys(field.types);
diff --git a/assets/javascripts/discourse/templates/components/wizard-custom-field.hbs b/assets/javascripts/discourse/templates/components/wizard-custom-field.hbs
index 038d22fb..1a48f9e2 100644
--- a/assets/javascripts/discourse/templates/components/wizard-custom-field.hbs
+++ b/assets/javascripts/discourse/templates/components/wizard-custom-field.hbs
@@ -65,13 +65,16 @@
- {{combo-box
+ {{wizard-subscription-selector
value=field.type
- content=fieldTypes
+ feature="field"
+ attribute="type"
onChange=(action "changeType")
+ wizard=wizard
options=(hash
none="admin.wizard.select_type"
- )}}
+ )
+ }}
diff --git a/assets/javascripts/discourse/templates/components/wizard-custom-step.hbs b/assets/javascripts/discourse/templates/components/wizard-custom-step.hbs
index c1aadd4b..e02c4014 100644
--- a/assets/javascripts/discourse/templates/components/wizard-custom-step.hbs
+++ b/assets/javascripts/discourse/templates/components/wizard-custom-step.hbs
@@ -117,6 +117,7 @@
{{wizard-custom-field
field=field
step=step
+ wizard=wizard
currentFieldId=currentField.id
fieldTypes=fieldTypes
removeField="removeField"
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index c9562d71..326ecff8 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -324,6 +324,7 @@ en:
then: "then"
set: "set"
equal: '='
+ not_equal: '!='
greater: '>'
less: '<'
greater_or_equal: '>='
diff --git a/lib/custom_wizard/api/log_entry.rb b/lib/custom_wizard/api/log_entry.rb
index 31af514e..f4f0ce69 100644
--- a/lib/custom_wizard/api/log_entry.rb
+++ b/lib/custom_wizard/api/log_entry.rb
@@ -65,18 +65,18 @@ class CustomWizard::Api::LogEntry
data = ::JSON.parse(record['value'])
data[:log_id] = record['key'].split('_').last
this_user = User.find_by(id: data['user_id'])
- unless this_user.nil?
- data[:user_id] = this_user.id || nil
- data[:username] = this_user.username || ""
- data[:userpath] = "/u/#{this_user.username_lower}/activity"
- data[:name] = this_user.name || ""
- data[:avatar_template] = "/user_avatar/default/#{this_user.username_lower}/97/#{this_user.uploaded_avatar_id}.png"
- else
+ if this_user.nil?
data[:user_id] = nil
data[:username] = ""
data[:userpath] = ""
data[:name] = ""
data[:avatar_template] = ""
+ else
+ data[:user_id] = this_user.id || nil
+ data[:username] = this_user.username || ""
+ data[:userpath] = "/u/#{this_user.username_lower}/activity"
+ data[:name] = this_user.name || ""
+ data[:avatar_template] = "/user_avatar/default/#{this_user.username_lower}/97/#{this_user.uploaded_avatar_id}.png"
end
self.new(api_name, data)
end
diff --git a/lib/custom_wizard/log.rb b/lib/custom_wizard/log.rb
index cb5b78c7..ed9624e1 100644
--- a/lib/custom_wizard/log.rb
+++ b/lib/custom_wizard/log.rb
@@ -15,13 +15,13 @@ class CustomWizard::Log
@username = attrs['username']
end
- def self.create(wizard_id, action, username, message)
+ def self.create(wizard_id, action, username, message, date = Time.now)
log_id = SecureRandom.hex(12)
PluginStore.set('custom_wizard_log',
log_id.to_s,
{
- date: Time.now,
+ date: date,
wizard_id: wizard_id,
action: action,
username: username,
diff --git a/lib/custom_wizard/mapper.rb b/lib/custom_wizard/mapper.rb
index 4e18ad01..66a10736 100644
--- a/lib/custom_wizard/mapper.rb
+++ b/lib/custom_wizard/mapper.rb
@@ -30,6 +30,7 @@ class CustomWizard::Mapper
OPERATORS = {
equal: '==',
+ not_equal: "!=",
greater: '>',
less: '<',
greater_or_equal: '>=',
diff --git a/lib/custom_wizard/subscription.rb b/lib/custom_wizard/subscription.rb
index dfb75324..6ca592f9 100644
--- a/lib/custom_wizard/subscription.rb
+++ b/lib/custom_wizard/subscription.rb
@@ -1,8 +1,10 @@
# frozen_string_literal: true
class CustomWizard::Subscription
- STANDARD_PRODUCT_ID = 'prod_MH11woVoZU5AWb'
- BUSINESS_PRODUCT_ID = 'prod_MH0wT627okh3Ef'
- COMMUNITY_PRODUCT_ID = 'prod_MU7l9EjxhaukZ7'
+ PRODUCT_HIERARCHY = %w[
+ community
+ standard
+ business
+ ]
def self.attributes
{
@@ -99,8 +101,29 @@ class CustomWizard::Subscription
}
end
+ attr_accessor :product_id,
+ :product_slug
+
def initialize
- @subscription = find_subscription
+ if CustomWizard::Subscription.client_installed?
+ result = SubscriptionClient.find_subscriptions("discourse-custom-wizard")
+
+ if result&.any?
+ ids_and_slugs = result.subscriptions.map do |subscription|
+ {
+ id: subscription.product_id,
+ slug: result.products[subscription.product_id]
+ }
+ end
+
+ id_and_slug = ids_and_slugs.sort do |a, b|
+ PRODUCT_HIERARCHY.index(b[:slug]) - PRODUCT_HIERARCHY.index(a[:slug])
+ end.first
+
+ @product_id = id_and_slug[:id]
+ @product_slug = id_and_slug[:slug]
+ end
+ end
end
def includes?(feature, attribute, value = nil)
@@ -140,38 +163,21 @@ class CustomWizard::Subscription
end
def standard?
- @subscription.product_id === STANDARD_PRODUCT_ID
+ product_slug === "standard"
end
def business?
- @subscription.product_id === BUSINESS_PRODUCT_ID
+ product_slug === "business"
end
def community?
- @subscription.product_id === COMMUNITY_PRODUCT_ID
+ product_slug === "community"
end
- def client_installed?
+ def self.client_installed?
defined?(SubscriptionClient) == 'constant' && SubscriptionClient.class == Module
end
- def find_subscription
- subscription = nil
-
- if client_installed?
- subscription = SubscriptionClientSubscription.active
- .where(product_id: [STANDARD_PRODUCT_ID, BUSINESS_PRODUCT_ID, COMMUNITY_PRODUCT_ID])
- .order("product_id = '#{BUSINESS_PRODUCT_ID}' DESC")
- .first
- end
-
- unless subscription
- subscription = OpenStruct.new(product_id: nil)
- end
-
- subscription
- end
-
def self.subscribed?
new.subscribed?
end
@@ -192,10 +198,6 @@ class CustomWizard::Subscription
new.type
end
- def self.client_installed?
- new.client_installed?
- end
-
def self.includes?(feature, attribute, value)
new.includes?(feature, attribute, value)
end
diff --git a/plugin.rb b/plugin.rb
index ab596540..ba3f8bf1 100644
--- a/plugin.rb
+++ b/plugin.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
# name: discourse-custom-wizard
# about: Forms for Discourse. Better onboarding, structured posting, data enrichment, automated actions and much more.
-# version: 2.3.1
+# version: 2.4.2
# authors: Angus McLeod, Faizaan Gagan, Robert Barrow, Keegan George, Kaitlin Maddever
# url: https://github.com/paviliondev/discourse-custom-wizard
# contact_emails: development@pavilion.tech
diff --git a/spec/components/custom_wizard/mapper_spec.rb b/spec/components/custom_wizard/mapper_spec.rb
index 510632a9..3e0e6ce6 100644
--- a/spec/components/custom_wizard/mapper_spec.rb
+++ b/spec/components/custom_wizard/mapper_spec.rb
@@ -291,6 +291,19 @@ describe CustomWizard::Mapper do
end
end
+ it "handles not equal pairs" do
+ expect(CustomWizard::Mapper.new(
+ inputs: inputs['not_equals_pair'],
+ data: data,
+ user: user1
+ ).perform).to eq(true)
+ expect(CustomWizard::Mapper.new(
+ inputs: inputs['not_equals_pair'],
+ data: data,
+ user: user2
+ ).perform).to eq(false)
+ end
+
it "handles greater than pairs" do
expect(CustomWizard::Mapper.new(
inputs: inputs['greater_than_pair'],
diff --git a/spec/components/custom_wizard/subscription_spec.rb b/spec/components/custom_wizard/subscription_spec.rb
index 2ac191e1..2db8dae0 100644
--- a/spec/components/custom_wizard/subscription_spec.rb
+++ b/spec/components/custom_wizard/subscription_spec.rb
@@ -2,29 +2,23 @@
describe CustomWizard::Subscription do
let(:guests_permitted) { get_wizard_fixture("wizard/guests_permitted") }
-
- def undefine_client_classes
- Object.send(:remove_const, :SubscriptionClient) if Object.constants.include?(:SubscriptionClient)
- Object.send(:remove_const, :SubscriptionClientSubscription) if Object.constants.include?(:SubscriptionClientSubscription)
- end
-
- def define_client_classes
- load File.expand_path("#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/subscription_client.rb", __FILE__)
- end
-
- def stub_client_methods
- [:active, :where, :order, :first].each do |method|
- SubscriptionClientSubscription.stubs(method)
- .returns(SubscriptionClientSubscription)
- end
- SubscriptionClientSubscription.stubs(:product_id).returns(SecureRandom.hex(8))
- end
+ let!(:business_product_id) { SecureRandom.hex(8) }
+ let!(:standard_product_id) { SecureRandom.hex(8) }
+ let!(:community_product_id) { SecureRandom.hex(8) }
+ let!(:product_slugs) {
+ {
+ "#{business_product_id}" => "business",
+ "#{standard_product_id}" => "standard",
+ "#{community_product_id}" => "community"
+ }
+ }
after do
undefine_client_classes
end
it "detects the subscription client" do
+ undefine_client_classes
expect(described_class.client_installed?).to eq(false)
end
@@ -50,7 +44,6 @@ describe CustomWizard::Subscription do
context "with subscription client" do
before do
define_client_classes
- stub_client_methods
end
it "detects the subscription client" do
@@ -58,6 +51,10 @@ describe CustomWizard::Subscription do
end
context "without a subscription" do
+ before do
+ SubscriptionClient.stubs(:find_subscriptions).returns(nil)
+ end
+
it "has none type" do
expect(described_class.type).to eq(:none)
end
@@ -71,59 +68,82 @@ describe CustomWizard::Subscription do
end
end
- context "with a subscription" do
+ context "with subscriptions" do
+ def get_subscription_result(product_ids)
+ result = SubscriptionClient::Subscriptions::Result.new
+ result.supplier = SubscriptionClientSupplier.new(product_slugs)
+ result.resource = SubscriptionClientResource.new
+ result.subscriptions = product_ids.map { |product_id| SubscriptionClientSubscription.new(product_id) }
+ result.products = product_slugs
+ result
+ end
+ let!(:business_subscription_result) { get_subscription_result([business_product_id]) }
+ let!(:standard_subscription_result) { get_subscription_result([standard_product_id]) }
+ let!(:community_subscription_result) { get_subscription_result([community_product_id]) }
+ let!(:multiple_subscription_result) { get_subscription_result([community_product_id, business_product_id]) }
+
it "handles mapped values" do
- SubscriptionClientSubscription.stubs(:product_id).returns(CustomWizard::Subscription::STANDARD_PRODUCT_ID)
+ SubscriptionClient.stubs(:find_subscriptions).returns(standard_subscription_result)
expect(described_class.includes?(:wizard, :permitted, guests_permitted["permitted"])).to eq(true)
- SubscriptionClientSubscription.stubs(:product_id).returns(CustomWizard::Subscription::COMMUNITY_PRODUCT_ID)
+ SubscriptionClient.stubs(:find_subscriptions).returns(community_subscription_result)
expect(described_class.includes?(:wizard, :permitted, guests_permitted["permitted"])).to eq(false)
end
- end
- context "with standard subscription" do
- before do
- SubscriptionClientSubscription.stubs(:product_id).returns(CustomWizard::Subscription::STANDARD_PRODUCT_ID)
+ context "with a standard subscription" do
+ before do
+ SubscriptionClient.stubs(:find_subscriptions).returns(standard_subscription_result)
+ end
+
+ it "detects standard type" do
+ expect(described_class.type).to eq(:standard)
+ end
+
+ it "standard features are included" do
+ expect(described_class.includes?(:wizard, :type, 'send_message')).to eq(true)
+ end
+
+ it "business features are not included" do
+ expect(described_class.includes?(:action, :type, 'create_category')).to eq(false)
+ end
end
- it "detects standard type" do
- expect(described_class.type).to eq(:standard)
+ context "with a business subscription" do
+ before do
+ SubscriptionClient.stubs(:find_subscriptions).returns(business_subscription_result)
+ end
+
+ it "detects business type" do
+ expect(described_class.type).to eq(:business)
+ end
+
+ it "business features are included" do
+ expect(described_class.includes?(:action, :type, 'create_category')).to eq(true)
+ end
end
- it "standard features are included" do
- expect(described_class.includes?(:wizard, :type, 'send_message')).to eq(true)
+ context "with a community subscription" do
+ before do
+ SubscriptionClient.stubs(:find_subscriptions).returns(community_subscription_result)
+ end
+
+ it "detects community type" do
+ expect(described_class.type).to eq(:community)
+ end
+
+ it "community features are included" do
+ expect(described_class.includes?(:action, :type, 'create_category')).to eq(true)
+ end
end
- it "business features are not included" do
- expect(described_class.includes?(:action, :type, 'create_category')).to eq(false)
- end
- end
+ context "with multiple subscriptions" do
+ before do
+ SubscriptionClient.stubs(:find_subscriptions).returns(multiple_subscription_result)
+ end
- context "with business subscription" do
- before do
- SubscriptionClientSubscription.stubs(:product_id).returns(CustomWizard::Subscription::BUSINESS_PRODUCT_ID)
- end
-
- it "detects business type" do
- expect(described_class.type).to eq(:business)
- end
-
- it "business features are included" do
- expect(described_class.includes?(:action, :type, 'create_category')).to eq(true)
- end
- end
-
- context "with community subscription" do
- before do
- SubscriptionClientSubscription.stubs(:product_id).returns(CustomWizard::Subscription::COMMUNITY_PRODUCT_ID)
- end
-
- it "detects community type" do
- expect(described_class.type).to eq(:community)
- end
-
- it "community features are included" do
- expect(described_class.includes?(:action, :type, 'create_category')).to eq(true)
+ it "detects correct type in hierarchy" do
+ expect(described_class.type).to eq(:business)
+ end
end
end
end
diff --git a/spec/fixtures/mapper/inputs.json b/spec/fixtures/mapper/inputs.json
index 3fd406a4..2ef81a28 100644
--- a/spec/fixtures/mapper/inputs.json
+++ b/spec/fixtures/mapper/inputs.json
@@ -195,6 +195,21 @@
]
}
],
+ "not_equals_pair": [
+ {
+ "type": "validation",
+ "pairs": [
+ {
+ "index": 0,
+ "key": "trust_level",
+ "key_type": "user_field",
+ "value": "1",
+ "value_type": "text",
+ "connector": "not_equal"
+ }
+ ]
+ }
+ ],
"greater_than_pair": [
{
"type": "validation",
diff --git a/spec/fixtures/subscription_client.rb b/spec/fixtures/subscription_client.rb
index a041b507..146279b1 100644
--- a/spec/fixtures/subscription_client.rb
+++ b/spec/fixtures/subscription_client.rb
@@ -1,4 +1,40 @@
# frozen_string_literal: true
-module SubscriptionClient; end
-class SubscriptionClientSubscription; end
+module SubscriptionClient
+ def self.find_subscriptions(resource_name)
+ end
+end
+
+class SubscriptionClientSupplier
+ attr_reader :product_slugs
+
+ def initialize(product_slugs)
+ @product_slugs = product_slugs
+ end
+end
+
+class SubscriptionClientResource
+end
+
+class SubscriptionClientSubscription
+ attr_reader :product_id
+
+ def initialize(product_id)
+ @product_id = product_id
+ end
+end
+
+module SubscriptionClient
+ class Subscriptions
+ class Result
+ attr_accessor :supplier,
+ :resource,
+ :subscriptions,
+ :products
+
+ def any?
+ supplier.present? && resource.present? && subscriptions.present? && products.present?
+ end
+ end
+ end
+end
diff --git a/spec/plugin_helper.rb b/spec/plugin_helper.rb
index a0189de1..8436f7c9 100644
--- a/spec/plugin_helper.rb
+++ b/spec/plugin_helper.rb
@@ -9,7 +9,26 @@ def get_wizard_fixture(path)
end
def enable_subscription(type)
- CustomWizard::Subscription.stubs(:client_installed?).returns(true)
CustomWizard::Subscription.stubs("#{type}?".to_sym).returns(true)
CustomWizard::Subscription.any_instance.stubs("#{type}?".to_sym).returns(true)
end
+
+def disable_subscriptions
+ %w[
+ standard
+ business
+ community
+ ].each do |type|
+ CustomWizard::Subscription.stubs("#{type}?".to_sym).returns(false)
+ CustomWizard::Subscription.any_instance.stubs("#{type}?".to_sym).returns(false)
+ end
+end
+
+def undefine_client_classes
+ Object.send(:remove_const, :SubscriptionClient) if Object.constants.include?(:SubscriptionClient)
+ Object.send(:remove_const, :SubscriptionClientSubscription) if Object.constants.include?(:SubscriptionClientSubscription)
+end
+
+def define_client_classes
+ load File.expand_path("#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/subscription_client.rb", __FILE__)
+end
diff --git a/spec/requests/custom_wizard/admin/admin_controller_spec.rb b/spec/requests/custom_wizard/admin/admin_controller_spec.rb
new file mode 100644
index 00000000..877f4262
--- /dev/null
+++ b/spec/requests/custom_wizard/admin/admin_controller_spec.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+describe CustomWizard::AdminController do
+ fab!(:admin_user) { Fabricate(:user, admin: true) }
+
+ it "requires an admin" do
+ get "/admin/wizards.json"
+ expect(response.status).to eq(404)
+ end
+
+ context "with an admin" do
+ before do
+ sign_in(admin_user)
+ end
+
+ context "without a subscription" do
+ before do
+ disable_subscriptions
+ define_client_classes
+ end
+
+ it "returns the right subscription details" do
+ get "/admin/wizards.json"
+ expect(response.parsed_body["subscribed"]).to eq(false)
+ expect(response.parsed_body["subscription_attributes"]).to eq(CustomWizard::Subscription.attributes.as_json)
+ expect(response.parsed_body["subscription_client_installed"]).to eq(true)
+ end
+ end
+
+ context "with a subscription" do
+ before do
+ enable_subscription("standard")
+ define_client_classes
+ end
+
+ it "returns the right subscription details" do
+ get "/admin/wizards.json"
+ expect(response.parsed_body["subscribed"]).to eq(true)
+ expect(response.parsed_body["subscription_type"]).to eq("standard")
+ expect(response.parsed_body["subscription_client_installed"]).to eq(true)
+ end
+ end
+ end
+end
diff --git a/spec/requests/custom_wizard/admin/submissions_controller_spec.rb b/spec/requests/custom_wizard/admin/submissions_controller_spec.rb
deleted file mode 100644
index 3c740c85..00000000
--- a/spec/requests/custom_wizard/admin/submissions_controller_spec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# frozen_string_literal: true
-
-describe CustomWizard::AdminSubmissionsController do
- fab!(:admin_user) { Fabricate(:user, admin: true) }
- fab!(:user1) { Fabricate(:user) }
- fab!(:user2) { Fabricate(:user) }
- fab!(:user3) { Fabricate(:user) }
-
- let(:template) { get_wizard_fixture("wizard") }
- let(:template_2) {
- temp = template.dup
- temp["id"] = "super_mega_fun_wizard_2"
- temp
- }
-
- before do
- CustomWizard::Template.save(template, skip_jobs: true)
- CustomWizard::Template.save(template_2, skip_jobs: true)
-
- wizard1 = CustomWizard::Wizard.create(template["id"], user1)
- wizard2 = CustomWizard::Wizard.create(template["id"], user2)
- wizard3 = CustomWizard::Wizard.create(template_2["id"], user3)
-
- CustomWizard::Submission.new(wizard1, step_1_field_1: "I am a user1's submission").save
- CustomWizard::Submission.new(wizard2, step_1_field_1: "I am a user2's submission").save
- CustomWizard::Submission.new(wizard3, step_1_field_1: "I am a user3's submission").save
-
- sign_in(admin_user)
- end
-
- it "returns a list of wizards" do
- get "/admin/wizards/submissions.json"
- expect(response.parsed_body.length).to eq(2)
- expect(response.parsed_body.first['id']).to eq(template['id'])
- end
-
- it "returns users' submissions for a wizard" do
- get "/admin/wizards/submissions/#{template['id']}.json"
- expect(response.parsed_body['submissions'].length).to eq(2)
- end
-
- it "downloads submissions" do
- get "/admin/wizards/submissions/#{template_2['id']}/download"
- expect(response.parsed_body.length).to eq(1)
- end
-end
diff --git a/spec/serializers/custom_wizard/log_serializer_spec.rb b/spec/serializers/custom_wizard/log_serializer_spec.rb
index 7dd1db0f..cad4a85b 100644
--- a/spec/serializers/custom_wizard/log_serializer_spec.rb
+++ b/spec/serializers/custom_wizard/log_serializer_spec.rb
@@ -4,7 +4,7 @@ describe CustomWizard::LogSerializer do
fab!(:user) { Fabricate(:user) }
it 'should return log attributes' do
- CustomWizard::Log.create('first-test-wizard', 'perform_first_action', 'first_test_user', 'First log message')
+ CustomWizard::Log.create('first-test-wizard', 'perform_first_action', 'first_test_user', 'First log message', 1.day.ago)
CustomWizard::Log.create('second-test-wizard', 'perform_second_action', 'second_test_user', 'Second log message')
json_array = ActiveModel::ArraySerializer.new(