Ensure sub_sequence_id is valid on sequence AST.
parent
612419338f
commit
6a69db4f7b
1
Gemfile
1
Gemfile
|
@ -22,6 +22,7 @@ gem 'active_model_serializers', '~> 0.8.3'
|
||||||
gem 'ice_cube'
|
gem 'ice_cube'
|
||||||
gem 'rack-cors', require: 'rack/cors'
|
gem 'rack-cors', require: 'rack/cors'
|
||||||
gem 'mysql'
|
gem 'mysql'
|
||||||
|
gem 'database_cleaner'
|
||||||
|
|
||||||
source 'https://rails-assets.org' do
|
source 'https://rails-assets.org' do
|
||||||
gem 'rails-assets-lodash'
|
gem 'rails-assets-lodash'
|
||||||
|
|
|
@ -107,6 +107,7 @@ GEM
|
||||||
adamantium (~> 0.2.0)
|
adamantium (~> 0.2.0)
|
||||||
equalizer (~> 0.0.9)
|
equalizer (~> 0.0.9)
|
||||||
concurrent-ruby (1.0.2)
|
concurrent-ruby (1.0.2)
|
||||||
|
database_cleaner (1.5.3)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.2.5)
|
||||||
docile (1.1.5)
|
docile (1.1.5)
|
||||||
domain_name (0.5.20160826)
|
domain_name (0.5.20160826)
|
||||||
|
@ -352,6 +353,7 @@ DEPENDENCIES
|
||||||
capybara
|
capybara
|
||||||
codeclimate-test-reporter
|
codeclimate-test-reporter
|
||||||
coffee-rails
|
coffee-rails
|
||||||
|
database_cleaner
|
||||||
devise!
|
devise!
|
||||||
factory_girl_rails
|
factory_girl_rails
|
||||||
faker
|
faker
|
||||||
|
|
|
@ -28,7 +28,10 @@ class Sequence < ActiveRecord::Base
|
||||||
.defineArg(:data_type, [String])
|
.defineArg(:data_type, [String])
|
||||||
.defineArg(:milliseconds, [Fixnum])
|
.defineArg(:milliseconds, [Fixnum])
|
||||||
.defineArg(:message, [String])
|
.defineArg(:message, [String])
|
||||||
.defineArg(:sub_sequence_id, [Fixnum])
|
.defineArg(:sub_sequence_id, [Fixnum]) do |node|
|
||||||
|
missing = !exists?(node.value)
|
||||||
|
node.invalidate!("Sequence ##{ node.value } does not exist.") if missing
|
||||||
|
end
|
||||||
.defineArg(:lhs, [String])
|
.defineArg(:lhs, [String])
|
||||||
.defineArg(:op, [String])
|
.defineArg(:op, [String])
|
||||||
.defineArg(:rhs, [Fixnum])
|
.defineArg(:rhs, [Fixnum])
|
||||||
|
|
|
@ -5,17 +5,14 @@ describe Api::SequencesController do
|
||||||
include Devise::Test::ControllerHelpers
|
include Devise::Test::ControllerHelpers
|
||||||
|
|
||||||
describe '#create' do
|
describe '#create' do
|
||||||
let(:nodes) {
|
|
||||||
f = File.read("./spec/lib/celery_script/ast_fixture3.json")
|
|
||||||
JSON.parse(f)["body"]
|
|
||||||
}
|
|
||||||
|
|
||||||
let(:user) { FactoryGirl.create(:user) }
|
let(:user) { FactoryGirl.create(:user) }
|
||||||
|
let(:nodes) { sequence_body_for(user) }
|
||||||
|
|
||||||
it 'handles a well formed AST in the body attribute' do
|
it 'handles a well formed AST in the body attribute' do
|
||||||
sign_in user
|
sign_in user
|
||||||
input = { name: "Scare Birds",
|
input = { name: "Scare Birds",
|
||||||
body: nodes }
|
body: nodes }
|
||||||
|
sequence_body_for(user)
|
||||||
post :create,
|
post :create,
|
||||||
input.merge(format: :json)
|
input.merge(format: :json)
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
module Helpers
|
module Helpers
|
||||||
|
AST_FIXTURE = File.read("./spec/lib/celery_script/ast_fixture3.json").freeze
|
||||||
|
|
||||||
|
# Create a VALID fake sequence.body for a particular user. Creates a fake
|
||||||
|
# subsequence in the DB when called.
|
||||||
|
def sequence_body_for(input)
|
||||||
|
body = JSON.parse(AST_FIXTURE)["body"]
|
||||||
|
case input
|
||||||
|
when User; id = FactoryGirl.create(:sequence, device: user.device).id
|
||||||
|
when Sequence; id = input.id
|
||||||
|
else; raise "?????"
|
||||||
|
end
|
||||||
|
body.map! do |node|
|
||||||
|
has_subseq = node.dig("args", "sub_sequence_id");
|
||||||
|
node["args"]["sub_sequence_id"] = id if has_subseq
|
||||||
|
node
|
||||||
|
end
|
||||||
|
body
|
||||||
|
end
|
||||||
|
|
||||||
def sign_in_as(user)
|
def sign_in_as(user)
|
||||||
# For when you're actually testing the login UI components. Otherwise,
|
# For when you're actually testing the login UI components. Otherwise,
|
||||||
# consider using the devise test helper `sign_in`
|
# consider using the devise test helper `sign_in`
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe CeleryScript::Checker do
|
describe CeleryScript::Checker do
|
||||||
file = File.read("./spec/lib/celery_script/ast_fixture3.json")
|
|
||||||
|
|
||||||
let(:hash) { JSON.parse(file).deep_symbolize_keys }
|
let(:hash) do
|
||||||
|
{
|
||||||
|
kind: "sequence",
|
||||||
|
args: {},
|
||||||
|
comment: "Properly formatted, syntactically valid sequence.",
|
||||||
|
body: sequence_body_for(FactoryGirl.create(:sequence))
|
||||||
|
}.deep_symbolize_keys
|
||||||
|
end
|
||||||
|
|
||||||
let(:tree) do
|
let(:tree) do
|
||||||
CeleryScript::AstNode.new(hash)
|
CeleryScript::AstNode.new(hash)
|
||||||
|
|
|
@ -3,10 +3,7 @@ require 'spec_helper'
|
||||||
describe Sequences::Create do
|
describe Sequences::Create do
|
||||||
let(:user) { FactoryGirl.create(:user) }
|
let(:user) { FactoryGirl.create(:user) }
|
||||||
let(:device) { user.device }
|
let(:device) { user.device }
|
||||||
let(:body) {
|
let(:body) { sequence_body_for(user) }
|
||||||
f = File.read("./spec/lib/celery_script/ast_fixture3.json")
|
|
||||||
JSON.parse(f)["body"]
|
|
||||||
}
|
|
||||||
|
|
||||||
name = Faker::Pokemon.name
|
name = Faker::Pokemon.name
|
||||||
let(:sequence_params) do
|
let(:sequence_params) do
|
||||||
|
|
|
@ -38,6 +38,11 @@ SmarfDoc.config do |c|
|
||||||
c.output_file = 'api_docs.md'
|
c.output_file = 'api_docs.md'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
require 'database_cleaner'
|
||||||
|
DatabaseCleaner.strategy = :truncation
|
||||||
|
# then, whenever you need to clean the DB
|
||||||
|
DatabaseCleaner.clean
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
|
|
||||||
config.backtrace_exclusion_patterns = [/gems/]
|
config.backtrace_exclusion_patterns = [/gems/]
|
||||||
|
@ -49,7 +54,6 @@ RSpec.configure do |config|
|
||||||
if ENV['docs']
|
if ENV['docs']
|
||||||
config.before(:each, type: :controller) do
|
config.before(:each, type: :controller) do
|
||||||
SmarfDoc.run!(request, response)
|
SmarfDoc.run!(request, response)
|
||||||
ActiveRecord::Base.subclasses.(&:destroy_all)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue