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 'rack-cors', require: 'rack/cors'
|
||||
gem 'mysql'
|
||||
gem 'database_cleaner'
|
||||
|
||||
source 'https://rails-assets.org' do
|
||||
gem 'rails-assets-lodash'
|
||||
|
|
|
@ -107,6 +107,7 @@ GEM
|
|||
adamantium (~> 0.2.0)
|
||||
equalizer (~> 0.0.9)
|
||||
concurrent-ruby (1.0.2)
|
||||
database_cleaner (1.5.3)
|
||||
diff-lcs (1.2.5)
|
||||
docile (1.1.5)
|
||||
domain_name (0.5.20160826)
|
||||
|
@ -352,6 +353,7 @@ DEPENDENCIES
|
|||
capybara
|
||||
codeclimate-test-reporter
|
||||
coffee-rails
|
||||
database_cleaner
|
||||
devise!
|
||||
factory_girl_rails
|
||||
faker
|
||||
|
|
|
@ -28,7 +28,10 @@ class Sequence < ActiveRecord::Base
|
|||
.defineArg(:data_type, [String])
|
||||
.defineArg(:milliseconds, [Fixnum])
|
||||
.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(:op, [String])
|
||||
.defineArg(:rhs, [Fixnum])
|
||||
|
|
|
@ -5,17 +5,14 @@ describe Api::SequencesController do
|
|||
include Devise::Test::ControllerHelpers
|
||||
|
||||
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(:nodes) { sequence_body_for(user) }
|
||||
|
||||
it 'handles a well formed AST in the body attribute' do
|
||||
sign_in user
|
||||
input = { name: "Scare Birds",
|
||||
body: nodes }
|
||||
sequence_body_for(user)
|
||||
post :create,
|
||||
input.merge(format: :json)
|
||||
expect(response.status).to eq(200)
|
||||
|
|
|
@ -1,4 +1,23 @@
|
|||
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)
|
||||
# For when you're actually testing the login UI components. Otherwise,
|
||||
# consider using the devise test helper `sign_in`
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
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
|
||||
CeleryScript::AstNode.new(hash)
|
||||
|
|
|
@ -3,10 +3,7 @@ require 'spec_helper'
|
|||
describe Sequences::Create do
|
||||
let(:user) { FactoryGirl.create(:user) }
|
||||
let(:device) { user.device }
|
||||
let(:body) {
|
||||
f = File.read("./spec/lib/celery_script/ast_fixture3.json")
|
||||
JSON.parse(f)["body"]
|
||||
}
|
||||
let(:body) { sequence_body_for(user) }
|
||||
|
||||
name = Faker::Pokemon.name
|
||||
let(:sequence_params) do
|
||||
|
|
|
@ -38,6 +38,11 @@ SmarfDoc.config do |c|
|
|||
c.output_file = 'api_docs.md'
|
||||
end
|
||||
|
||||
require 'database_cleaner'
|
||||
DatabaseCleaner.strategy = :truncation
|
||||
# then, whenever you need to clean the DB
|
||||
DatabaseCleaner.clean
|
||||
|
||||
RSpec.configure do |config|
|
||||
|
||||
config.backtrace_exclusion_patterns = [/gems/]
|
||||
|
@ -49,7 +54,6 @@ RSpec.configure do |config|
|
|||
if ENV['docs']
|
||||
config.before(:each, type: :controller) do
|
||||
SmarfDoc.run!(request, response)
|
||||
ActiveRecord::Base.subclasses.(&:destroy_all)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue