system_tester 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 652bc548a774e0a42ba29b0f818edc42a117110b
4
- data.tar.gz: 6206c7c9aac64360a585ee95774f2d2b500d1a10
3
+ metadata.gz: 6e1676f61e29bae6df5fa24162aeb38db69c0057
4
+ data.tar.gz: a14e44f9d56dc8d3cffed29687dccfd097adc111
5
5
  SHA512:
6
- metadata.gz: 14015439db14beb2713aa26f304b491a581eff222362dbb6aed978994f051815fdd0de5b490aa9059fc36b784bbcb925d25b24034b69c199a20b1f7c75f482fb
7
- data.tar.gz: 8d623a4a103cd31533ebe64bb1017f0ec3adbaadb22de4eda2ec20d269740fa4e3777e02e48acb0c425531e37127bb28ae282cfec1a31f293d9aebd0568ca3e0
6
+ metadata.gz: b195eb78288b845aadbaea925bc1278248bd021ee641d14172db8407e9a3027d4e35ba5369c3fd9384c0f362597b77719a4162d827749e43d088b76090e8a384
7
+ data.tar.gz: b9c442b45b13f5bcd474c178212dd0ab444bc0a7f77bed7a56a76b48826dcc8c66c19a790b3e6a49ab9c5e7132d641ead993a26e09e70d348727bc3a8328ab45
data/README.md CHANGED
@@ -23,7 +23,7 @@ system_tester:
23
23
  And then install and run the migrations:
24
24
  ```bash
25
25
  $ bundle install
26
- $ RAILS_ENV=system_tester rails db:migrate
26
+ $ rails system_tester:migrate
27
27
  ```
28
28
 
29
29
  Mount the engine in config/routes.rb:
@@ -41,6 +41,8 @@ end
41
41
  Start your dev server and you are good to go.
42
42
 
43
43
  ## Chrome extension
44
+ ![image](screenshot.png)
45
+
44
46
  The chrome extension provides a Devtools tab and acts as a client to this gem.
45
47
 
46
48
  IN DEVELOPMENT - to request access feel free to dm on twitter @ralafranchi.
@@ -59,6 +61,3 @@ testing steps:
59
61
 
60
62
  ## License
61
63
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
62
-
63
- ## TODOS
64
- * File management and hooks to create the scripts. To get the code for a feature you can call `to_s` on it.
@@ -1,15 +1,5 @@
1
1
  module SystemTester
2
2
  class ApplicationController < ActionController::API
3
3
  # protect_from_forgery with: :exception
4
- # before_action :set_headers
5
-
6
- private
7
-
8
- def set_headers
9
- headers['Access-Control-Allow-Origin'] = 'http://localhost:8080'
10
- headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
11
- headers['Access-Control-Request-Method'] = '*'
12
- headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
13
- end
14
4
  end
15
5
  end
@@ -26,7 +26,7 @@ module SystemTester
26
26
 
27
27
  def destroy
28
28
  Feature.find(params[:id]).destroy!
29
- render head: :ok
29
+ render json: {}
30
30
  end
31
31
 
32
32
  private
@@ -23,7 +23,7 @@ module SystemTester
23
23
 
24
24
  def destroy
25
25
  ScenarioStep.find(params[:id]).destroy!
26
- render head: :ok
26
+ render json: {}
27
27
  end
28
28
 
29
29
  private
@@ -31,7 +31,7 @@ module SystemTester
31
31
 
32
32
  def destroy
33
33
  Scenario.find(params[:id]).destroy!
34
- render head: :ok
34
+ render json: {}
35
35
  end
36
36
 
37
37
  private
@@ -23,7 +23,7 @@ module SystemTester
23
23
 
24
24
  def destroy
25
25
  StairStep.find(params[:id]).destroy!
26
- render head: :ok
26
+ render json: {}
27
27
  end
28
28
 
29
29
  private
@@ -34,7 +34,7 @@ module SystemTester
34
34
 
35
35
  def destroy
36
36
  Step.find(params[:id]).destroy!
37
- render head: :ok
37
+ render json: {}
38
38
  end
39
39
 
40
40
  private
@@ -0,0 +1,83 @@
1
+ require 'fileutils'
2
+
3
+ module SystemTester
4
+ module Fileable
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_save do
9
+ FileUtils.mkdir_p(base_path)
10
+ unless File.exists?(system_test_case_path)
11
+ File.open(system_test_case_path, "w+") { |f| f.write(system_test_case_content) }
12
+ end
13
+ end
14
+
15
+ after_touch do
16
+ save_file
17
+ end
18
+
19
+ before_create do
20
+ save_file
21
+ end
22
+
23
+ before_update do
24
+ if title_changed?
25
+ delete_old_file
26
+ end
27
+ save_file
28
+ end
29
+
30
+ before_destroy do
31
+ delete_file
32
+ end
33
+
34
+ private
35
+
36
+ def test_path
37
+ Rails.root.join("test")
38
+ end
39
+
40
+ def base_path
41
+ File.join(test_path, base_dir)
42
+ end
43
+
44
+ def full_file
45
+ File.join(base_path, file_name)
46
+ end
47
+
48
+ def old_file
49
+ File.join(base_path, file_name_was)
50
+ end
51
+
52
+ def delete_file
53
+ File.delete(full_file)
54
+ end
55
+
56
+ def delete_old_file
57
+ File.delete(old_file)
58
+ end
59
+
60
+ def save_file
61
+ File.open(full_file, 'w+') do |f|
62
+ f.write(code_to_write)
63
+ end
64
+ end
65
+
66
+ def system_test_case_path
67
+ File.join(base_path, "system_tester_system_test_case.rb")
68
+ end
69
+
70
+ def system_test_case_content
71
+ <<EOF
72
+ require "test_helper"
73
+
74
+ module SystemTester
75
+ class SystemTesterSystemTestCase < ActionDispatch::SystemTestCase
76
+ driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
77
+ end
78
+ end
79
+ EOF
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,6 +1,7 @@
1
1
  module SystemTester
2
2
  class Feature < ApplicationRecord
3
3
  include SystemTester::TitleValidatable
4
+ include SystemTester::Fileable
4
5
  validates_uniqueness_of :title
5
6
 
6
7
  has_many :scenarios, foreign_key: "system_tester_feature_id", class_name: 'SystemTester::Scenario', dependent: :destroy
@@ -12,14 +13,18 @@ module SystemTester
12
13
  str << close
13
14
  str
14
15
  end
16
+ alias_method :code_to_write, :to_s
15
17
 
16
18
  private
17
19
 
18
20
  def open
19
21
  str = ""
20
- str << "require 'application_system_test_case'\n\n"
22
+ stairs.each do |stair|
23
+ str << "require 'support/system_tester/#{stair.method_name}'\n"
24
+ end
25
+ str << "require_relative 'system_tester_system_test_case'\n\n"
21
26
  str << "module SystemTester\n"
22
- str << " class #{stripped_title.camelize}Test < ApplicationSystemTestCase\n"
27
+ str << " class #{stripped_title.camelize}Test < SystemTesterSystemTestCase\n"
23
28
  stairs.each do |stair|
24
29
  str << " include #{stair.module_name}\n"
25
30
  end
@@ -35,8 +40,24 @@ module SystemTester
35
40
  title.gsub(/\s+/,"")
36
41
  end
37
42
 
43
+ def stripped_title_was
44
+ title_was.gsub(/\s+/,"")
45
+ end
46
+
38
47
  def stairs
39
48
  Stair.joins(:scenarios).where("system_tester_scenarios.system_tester_feature_id = ?", id)
40
49
  end
50
+
51
+ def base_dir
52
+ File.join("system", "system_tester")
53
+ end
54
+
55
+ def file_name
56
+ "#{stripped_title.underscore}_test.rb"
57
+ end
58
+
59
+ def file_name_was
60
+ "#{stripped_title_was.underscore}_test.rb"
61
+ end
41
62
  end
42
63
  end
@@ -12,6 +12,10 @@ module SystemTester
12
12
  dependent: :destroy
13
13
  has_many :steps, -> { order 'position asc' }, through: :scenario_steps
14
14
 
15
+ after_commit do
16
+ feature.touch if feature.present?
17
+ end
18
+
15
19
  def to_s
16
20
  str = ""
17
21
  str << open
@@ -3,5 +3,9 @@ module SystemTester
3
3
  belongs_to :step, class_name: "SystemTester::Step", foreign_key: "system_tester_step_id"
4
4
  belongs_to :scenario, class_name: "SystemTester::Scenario", foreign_key: "system_tester_scenario_id"
5
5
  acts_as_list scope: :system_tester_scenario_id
6
+
7
+ after_commit do
8
+ scenario.feature.touch if scenario.present? && scenario.feature.present?
9
+ end
6
10
  end
7
11
  end
@@ -1,5 +1,6 @@
1
1
  module SystemTester
2
2
  class Stair < Step
3
+ include SystemTester::Fileable
3
4
  has_many :stair_steps,
4
5
  -> { order 'position asc' },
5
6
  class_name: "SystemTester::StairStep",
@@ -8,7 +9,7 @@ module SystemTester
8
9
  has_many :steps, -> { order 'position asc' }, through: :stair_steps
9
10
 
10
11
  def to_s
11
- "#{INDENT}# Stair #{title}\n#{INDENT}#{method_name}\n\n"
12
+ "#{INDENT}# Stair: #{title}\n#{INDENT}#{method_name}\n\n"
12
13
  end
13
14
 
14
15
  def module
@@ -18,11 +19,16 @@ module SystemTester
18
19
  str << close
19
20
  str
20
21
  end
22
+ alias_method :code_to_write, :module
21
23
 
22
24
  def module_name
23
25
  stripped_title.camelize
24
26
  end
25
27
 
28
+ def method_name
29
+ stripped_title.underscore
30
+ end
31
+
26
32
  def icon
27
33
  "clear_all"
28
34
  end
@@ -49,8 +55,24 @@ module SystemTester
49
55
  title.gsub(/\s+/,"")
50
56
  end
51
57
 
52
- def method_name
53
- stripped_title.underscore
58
+ def stripped_title_was
59
+ title_was.gsub(/\s+/,"")
60
+ end
61
+
62
+ def method_name_was
63
+ stripped_title_was.underscore
64
+ end
65
+
66
+ def base_dir
67
+ File.join("support", "system_tester")
68
+ end
69
+
70
+ def file_name
71
+ "#{method_name}.rb"
72
+ end
73
+
74
+ def file_name_was
75
+ "#{method_name_was}.rb"
54
76
  end
55
77
  end
56
78
  end
@@ -3,5 +3,9 @@ module SystemTester
3
3
  belongs_to :step, class_name: "SystemTester::Step", foreign_key: "system_tester_step_id"
4
4
  belongs_to :stair, class_name: "SystemTester::Stair", foreign_type: "SystemTester::Stair", foreign_key: "system_tester_stair_id"
5
5
  acts_as_list scope: :system_tester_stair_id
6
+
7
+ after_commit do
8
+ stair.touch if stair.present?
9
+ end
6
10
  end
7
11
  end
@@ -16,12 +16,21 @@ module SystemTester
16
16
  dependent: :destroy
17
17
  has_many :stairs, through: :stair_steps
18
18
 
19
+ after_commit do
20
+ stairs.each do |stair|
21
+ stair.touch
22
+ end
23
+ scenarios.each do |scenario|
24
+ scenario.feature.touch if scenario.feature.present?
25
+ end
26
+ end
27
+
19
28
  def self.friendly_type
20
29
  name.demodulize
21
30
  end
22
31
 
23
32
  def self.parent_type
24
- ancestors.fourth.name.demodulize
33
+ ancestors.fourth.name ? ancestors.fourth.name.demodulize : "Step"
25
34
  end
26
35
 
27
36
  def self.bg_css
@@ -1,9 +1,8 @@
1
1
  class CreateSystemTesterFeatures < ActiveRecord::Migration[5.1]
2
2
  def change
3
- if Rails.env.system_tester?
4
- create_table :system_tester_features do |t|
5
- t.string :title
6
- end
3
+ create_table :system_tester_features do |t|
4
+ t.string :title
5
+ t.timestamps
7
6
  end
8
7
  end
9
8
  end
@@ -1,10 +1,9 @@
1
1
  class CreateSystemTesterScenarios < ActiveRecord::Migration[5.1]
2
2
  def change
3
- if Rails.env.system_tester?
4
- create_table :system_tester_scenarios do |t|
5
- t.string :title
6
- t.references :system_tester_feature, foreign_key: true
7
- end
3
+ create_table :system_tester_scenarios do |t|
4
+ t.string :title
5
+ t.references :system_tester_feature, foreign_key: true
6
+ t.timestamps
8
7
  end
9
8
  end
10
9
  end
@@ -1,12 +1,11 @@
1
1
  class CreateSystemTesterSteps < ActiveRecord::Migration[5.1]
2
2
  def change
3
- if Rails.env.system_tester?
4
- create_table :system_tester_steps do |t|
5
- t.string :title
6
- t.string :type
7
- t.string :arg_one
8
- t.string :arg_two
9
- end
3
+ create_table :system_tester_steps do |t|
4
+ t.string :title
5
+ t.string :type
6
+ t.string :arg_one
7
+ t.string :arg_two
8
+ t.timestamps
10
9
  end
11
10
  end
12
11
  end
@@ -1,11 +1,10 @@
1
1
  class CreateSystemTesterScenarioSteps < ActiveRecord::Migration[5.1]
2
2
  def change
3
- if Rails.env.system_tester?
4
- create_table :system_tester_scenario_steps do |t|
5
- t.integer :position
6
- t.references :system_tester_step, foreign_key: true
7
- t.references :system_tester_scenario, foreign_key: true, index: {name: "index_st_st_scenario_id"}
8
- end
3
+ create_table :system_tester_scenario_steps do |t|
4
+ t.integer :position
5
+ t.references :system_tester_step, foreign_key: true
6
+ t.references :system_tester_scenario, foreign_key: true, index: {name: "index_st_st_scenario_id"}
7
+ t.timestamps
9
8
  end
10
9
  end
11
10
  end
@@ -1,9 +1,10 @@
1
- class CreateStairSteps < ActiveRecord::Migration[5.1]
1
+ class CreateSystemTesterStairSteps < ActiveRecord::Migration[5.1]
2
2
  def change
3
3
  create_table :system_tester_stair_steps do |t|
4
4
  t.integer :position
5
5
  t.references :system_tester_step, foreign_key: true
6
6
  t.references :system_tester_stair, foreign_key: { to_table: :system_tester_steps }
7
+ t.timestamps
7
8
  end
8
9
  end
9
10
  end
data/db/schema.rb CHANGED
@@ -14,12 +14,16 @@ ActiveRecord::Schema.define(version: 20170629120850) do
14
14
 
15
15
  create_table "system_tester_features", force: :cascade do |t|
16
16
  t.string "title"
17
+ t.datetime "created_at", null: false
18
+ t.datetime "updated_at", null: false
17
19
  end
18
20
 
19
21
  create_table "system_tester_scenario_steps", force: :cascade do |t|
20
22
  t.integer "position"
21
23
  t.integer "system_tester_step_id"
22
24
  t.integer "system_tester_scenario_id"
25
+ t.datetime "created_at", null: false
26
+ t.datetime "updated_at", null: false
23
27
  t.index ["system_tester_scenario_id"], name: "index_st_st_scenario_id"
24
28
  t.index ["system_tester_step_id"], name: "index_system_tester_scenario_steps_on_system_tester_step_id"
25
29
  end
@@ -27,6 +31,8 @@ ActiveRecord::Schema.define(version: 20170629120850) do
27
31
  create_table "system_tester_scenarios", force: :cascade do |t|
28
32
  t.string "title"
29
33
  t.integer "system_tester_feature_id"
34
+ t.datetime "created_at", null: false
35
+ t.datetime "updated_at", null: false
30
36
  t.index ["system_tester_feature_id"], name: "index_system_tester_scenarios_on_system_tester_feature_id"
31
37
  end
32
38
 
@@ -34,6 +40,8 @@ ActiveRecord::Schema.define(version: 20170629120850) do
34
40
  t.integer "position"
35
41
  t.integer "system_tester_step_id"
36
42
  t.integer "system_tester_stair_id"
43
+ t.datetime "created_at", null: false
44
+ t.datetime "updated_at", null: false
37
45
  t.index ["system_tester_stair_id"], name: "index_system_tester_stair_steps_on_system_tester_stair_id"
38
46
  t.index ["system_tester_step_id"], name: "index_system_tester_stair_steps_on_system_tester_step_id"
39
47
  end
@@ -43,6 +51,8 @@ ActiveRecord::Schema.define(version: 20170629120850) do
43
51
  t.string "type"
44
52
  t.string "arg_one"
45
53
  t.string "arg_two"
54
+ t.datetime "created_at", null: false
55
+ t.datetime "updated_at", null: false
46
56
  end
47
57
 
48
58
  end
data/lib/system_tester.rb CHANGED
@@ -1,4 +1,4 @@
1
-
1
+ require "rack/cors"
2
2
  require "acts_as_list"
3
3
  require "system_tester/engine"
4
4
 
@@ -3,9 +3,15 @@ module SystemTester
3
3
  isolate_namespace SystemTester
4
4
  config.generators.api_only = true
5
5
 
6
- initializer :override_db_dir do |app|
7
- if Rails.env.system_tester?
8
- app.config.paths["db"] = config.paths['db'].expanded
6
+ initializer :cors do |app|
7
+ app.config.middleware.insert_before 0, Rack::Cors do
8
+ allow do
9
+ origins '*'
10
+ resource '/system_tester/*',
11
+ :headers => :any,
12
+ :methods => [:get, :post, :delete, :put, :patch, :options, :head]
13
+
14
+ end
9
15
  end
10
16
  end
11
17
 
@@ -1,3 +1,3 @@
1
1
  module SystemTester
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -1,5 +1,33 @@
1
1
  # desc "Explaining what the task does"
2
2
  # create install task
3
- # task :system_tester do
4
- # # Task goes here
5
- # end
3
+ # TODO:
4
+ # - potentially load using sql instead of migrations
5
+ # - auto mount in the routes
6
+ # - auto add to database.yml defaulting to sqlite3
7
+ # - create test directories
8
+ # - copy system_tester_system_test_case
9
+
10
+ # remove migration copy in favor of custom migration task
11
+ Rake::Task["system_tester:install:migrations"].clear
12
+ namespace :system_tester do
13
+ namespace :install do
14
+ desc "(Not Supported)"
15
+ task "migrations" do
16
+ # do nothing
17
+ puts "Not supported..."
18
+ end
19
+ end
20
+
21
+ # see ActiveRecord::Tasks::DatabaseTasks
22
+ desc "Running migrations for the System Tester db"
23
+ task :migrate => :environment do
24
+ include ActiveRecord::Tasks
25
+ ENV['RAILS_ENV'] = "system_tester"
26
+ DatabaseTasks.db_dir = Rails.root.join("db")
27
+ DatabaseTasks.env = "system_tester"
28
+ DatabaseTasks.migrations_paths = [SystemTester::Engine.root.join("db", "migrate")]
29
+ DatabaseTasks.root = Rails.root
30
+ DatabaseTasks.create_current("system_tester")
31
+ DatabaseTasks.migrate
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: system_tester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard LaFranchi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-30 00:00:00.000000000 Z
11
+ date: 2017-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-cors
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: sqlite3
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +85,7 @@ files:
71
85
  - app/controllers/system_tester/step_types_controller.rb
72
86
  - app/controllers/system_tester/steps_controller.rb
73
87
  - app/jobs/system_tester/application_job.rb
88
+ - app/models/concerns/system_tester/fileable.rb
74
89
  - app/models/concerns/system_tester/title_validatable.rb
75
90
  - app/models/system_tester/action.rb
76
91
  - app/models/system_tester/application_record.rb
@@ -91,7 +106,7 @@ files:
91
106
  - db/migrate/20170513213953_create_system_tester_scenarios.rb
92
107
  - db/migrate/20170513214255_create_system_tester_steps.rb
93
108
  - db/migrate/20170513214722_create_system_tester_scenario_steps.rb
94
- - db/migrate/20170629120850_create_stair_steps.rb
109
+ - db/migrate/20170629120850_create_system_tester_stair_steps.rb
95
110
  - db/schema.rb
96
111
  - lib/system_tester.rb
97
112
  - lib/system_tester/engine.rb