ruby_raider 0.8.6 → 0.8.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/integration.yml +0 -2
  3. data/.github/workflows/push_gem.yml +37 -0
  4. data/.github/workflows/system.yml +0 -2
  5. data/.gitignore +1 -2
  6. data/.rubocop.yml +1 -1
  7. data/README.md +26 -22
  8. data/lib/commands/scaffolding_commands.rb +34 -36
  9. data/lib/generators/automation/templates/partials/initialize_selector.tt +7 -0
  10. data/lib/generators/automation/templates/partials/selenium_login.tt +1 -0
  11. data/lib/generators/generator.rb +6 -1
  12. data/lib/generators/invoke_generators.rb +4 -2
  13. data/lib/generators/menu_generator.rb +21 -6
  14. data/lib/generators/rspec/rspec_generator.rb +6 -0
  15. data/lib/generators/rspec/templates/spec.tt +29 -0
  16. data/lib/generators/templates/common/gemfile.tt +4 -0
  17. data/lib/generators/templates/common/rakefile.tt +4 -8
  18. data/lib/generators/templates/common/read_me.tt +44 -49
  19. data/lib/generators/templates/helpers/driver_helper.tt +8 -1
  20. data/lib/generators/templates/helpers/partials/driver_and_options.tt +8 -2
  21. data/lib/generators/templates/helpers/spec_helper.tt +3 -0
  22. data/lib/ruby_raider.rb +3 -9
  23. data/lib/scaffolding/scaffolding.rb +14 -6
  24. data/lib/scaffolding/templates/feature.tt +1 -1
  25. data/lib/scaffolding/templates/page_object.tt +2 -2
  26. data/lib/scaffolding/templates/spec.tt +2 -3
  27. data/lib/scaffolding/templates/steps.tt +12 -0
  28. data/lib/version +1 -0
  29. data/ruby_raider.gemspec +1 -2
  30. data/spec/integration/commands/scaffolding_commands_spec.rb +14 -4
  31. data/spec/spec_helper.rb +1 -1
  32. metadata +6 -20
  33. data/lib/commands/open_ai_commands.rb +0 -85
  34. data/lib/open_ai/open_ai.rb +0 -67
  35. data/spec/integration/commands/open_ai_commands_spec.rb +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bd92fae06515596d875be2a1c9d05b2335574839da3269de1c598d4287e9fd9
4
- data.tar.gz: 8cc4c5922b36406b33d5e5df4c897ab0ce3a0d3a7036395293e634eeccbb27a2
3
+ metadata.gz: a3fe29e41e6594c06a03da48fdd3481af4706a6cf4e5c344bb3f78db1e48cec8
4
+ data.tar.gz: 3b53ca1421e02300c0edb463cd4ca7c373992afdb41caa70318fc9df213fec90
5
5
  SHA512:
6
- metadata.gz: c521e8d445f0490f04349ede87a4fd56552dd13ac1261735792b82a5ab3c064202120fc1bd4fb64c18d05f7575d5dd5b94dde68d186c3cb7b27e54ceeb095390
7
- data.tar.gz: 2d4f842b0214f55d11a6711353dd059d21085ee636cd1d6c81bd2d143b2fcee92d236f27906f1a8caa3bbc9b44dcb9a6151c2dd29f7720228a873480f9922742
6
+ metadata.gz: 2b684e1ebcca1611a9593f3b77039bfd66e21656e6746f6e31a5240f9fdb032527e29f63d5aab3caf770c472c4c8810f50c587a61375568d6db4d93258454c49
7
+ data.tar.gz: da691e9de5d1128eb1aa0d99fbbde682afb70d0be3bf3d29a75b88bbc2af7c771b19a1aa29295fa4c1f5bd8d56082f7659284aff7484c6f284d6891ae21ff9c9
@@ -20,6 +20,4 @@ jobs:
20
20
  run: bundle install
21
21
 
22
22
  - name: Build and run integration tests
23
- env:
24
- OPENAI_ACCESS_TOKEN: ${{ secrets.OPENAI_ACCESS_TOKEN }}
25
23
  run: rake integration
@@ -0,0 +1,37 @@
1
+ name: Push Gem
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ push:
11
+ if: github.repository == 'RubyRaider/ruby_raider'
12
+ runs-on: ubuntu-latest
13
+
14
+ environment:
15
+ name: rubygems.org
16
+ url: https://rubygems.org/gems/ruby_raider
17
+
18
+ permissions:
19
+ contents: write
20
+ id-token: write
21
+
22
+ steps:
23
+ # Set up
24
+ - name: Harden Runner
25
+ uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1
26
+ with:
27
+ egress-policy: audit
28
+
29
+ - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
30
+ - name: Set up Ruby
31
+ uses: ruby/setup-ruby@cacc9f1c0b3f4eb8a16a6bb0ed10897b43b9de49 # v1.176.0
32
+ with:
33
+ bundler-cache: true
34
+ ruby-version: ruby
35
+
36
+ # Release
37
+ - uses: rubygems/release-gem@612653d273a73bdae1df8453e090060bb4db5f31 # v1
@@ -26,6 +26,4 @@ jobs:
26
26
  run: bundle install
27
27
 
28
28
  - name: Build and run system tests
29
- env:
30
- OPENAI_ACCESS_TOKEN: ${{ secrets.OPENAI_ACCESS_TOKEN }}
31
29
  run: rake system
data/.gitignore CHANGED
@@ -1,5 +1,4 @@
1
1
  ruby_raider-*.gem
2
2
  .idea/
3
3
  ruby_raider.iml
4
- Gemfile.lock
5
- .env
4
+ Gemfile.lock
data/.rubocop.yml CHANGED
@@ -87,4 +87,4 @@ Style/SafeNavigation:
87
87
 
88
88
  Style/SingleLineBlockParams:
89
89
  Description: 'Enforces the names of some block params.'
90
- Enabled: false
90
+ Enabled: false
data/README.md CHANGED
@@ -88,10 +88,9 @@ Select the ones you will like to work with.
88
88
 
89
89
  ```ruby
90
90
  Commands:
91
- raider generate # Provides access to all the generators commands
91
+ raider generate # Provides access to all the scaffolding commands
92
92
  raider help [COMMAND] # Describe available commands or one specific command
93
93
  raider new [PROJECT_NAME] # Creates a new framework based on settings picked
94
- raider open_ai # Provides access to all the open ai commands
95
94
  raider utility # Provides access to all the utility commands
96
95
  raider version # It shows the version of Ruby Raider you are currently using
97
96
  ```
@@ -100,33 +99,38 @@ All the basic commands have their corresponding shortcut:
100
99
 
101
100
  * g for generate
102
101
  * n for new
103
- * o for open_ai
104
102
  * u for utility
105
103
  * v for version
106
104
 
105
+ ### Scaffolding Commands
106
+ Ruby Raider also supports scaffolding:
107
+
108
+ * To create a new page object you do: ```raider g page [PAGE_NAME]```
109
+ * To create a new spec you do: ```raider g spec [SPEC_NAME]```
110
+ * To create a new feature you do: ```raider g feature [FEATURE_NAME]```
111
+ * To create a new steps definition you do: ```raider g steps [STEPS_NAME]```
112
+ * To create both a page/spec or a page/feature/steps you do: ```raider g scaffold [SCAFFOLD_NAME]```
113
+
114
+ It's possible to add the option --path or -p if you want to specify where to create your features, pages, helpers and
115
+ specs.
116
+
117
+ If you want to set the default path for the creation of your features, helpers and specs:
118
+
119
+ ```ruby
120
+ raider u path [PATH_NAME] - -feature or -f
121
+ raider u path [PATH_NAME] - -spec or -s
122
+ raider u path [PATH_NAME] - -helper or -h
123
+ ```
124
+
125
+ If you don't specify an option, path will assume you want to change the default path for pages.
126
+
127
+
107
128
  ### Appium Server Command
108
129
  To initialise Appium server run this command:
109
130
  ```ruby
110
131
  raider u start_appium
111
132
  ```
112
133
 
113
- ### Open AI Commands
134
+ ### Sponsors
114
135
 
115
- ```ruby
116
- # Will print the result of the request on the terminal
117
- raider o make [REQUEST]
118
- # Will create a file with the result of your request as content
119
- raider o make [REQUEST] - -path or -p [PATH]
120
- # Will input the content of the chosen file into open ai and will edit it based on the result
121
- raider o make [PATH_NAME] - -edit or -e [FILE_PATH]
122
- # Creates a cucumber file and uses it to input into open ai and create a steps file
123
- # The prompt is required
124
- raider o cucumber [NAME] - -prompt or -p [PROMPT]
125
- # Creates a cucumber step definitions file based on an scenario file
126
- raider open_ai steps [NAME]
127
- Options :
128
- -p, [--path = PATH] # The path where your steps will be created
129
- -pr, [--prompt = PROMPT] # This will create the selected steps based on your prompt using open ai
130
- -i, [--input = INPUT] # It uses a file as input to create the steps
131
-
132
- ```
136
+ This project is tested with BrowserStack.
@@ -7,6 +7,7 @@ require_relative '../commands/utility_commands'
7
7
 
8
8
  # :reek:FeatureEnvy { enabled: false }
9
9
  # :reek:UtilityFunction { enabled: false }
10
+ # :reek:RepeatedConditional { enabled: false }
10
11
  class ScaffoldingCommands < Thor
11
12
  desc 'page [PAGE_NAME]', 'Creates a new page object'
12
13
  option :path,
@@ -15,7 +16,9 @@ class ScaffoldingCommands < Thor
15
16
  type: :boolean, required: false, desc: 'This will delete the selected page', aliases: '-d'
16
17
 
17
18
  def page(name)
18
- handle_scaffolding(name, 'page')
19
+ return delete_scaffolding(name, 'page') if options[:delete]
20
+
21
+ generate_scaffolding(name, 'page', options[:path])
19
22
  end
20
23
 
21
24
  desc 'feature [NAME]', 'Creates a new feature'
@@ -27,7 +30,9 @@ class ScaffoldingCommands < Thor
27
30
  required: false, desc: 'This will delete the selected feature', aliases: '-d'
28
31
 
29
32
  def feature(name)
30
- handle_scaffolding(name, 'feature')
33
+ return delete_scaffolding(name, 'feature') if options[:delete]
34
+
35
+ generate_scaffolding(name, 'feature', options[:path])
31
36
  end
32
37
 
33
38
  desc 'spec [SPEC_NAME]', 'Creates a new spec'
@@ -37,7 +42,9 @@ class ScaffoldingCommands < Thor
37
42
  type: :boolean, required: false, desc: 'This will delete the selected spec', aliases: '-d'
38
43
 
39
44
  def spec(name)
40
- handle_scaffolding(name, 'spec')
45
+ return delete_scaffolding(name, 'spec') if options[:delete]
46
+
47
+ generate_scaffolding(name, 'spec', options[:path])
41
48
  end
42
49
 
43
50
  desc 'helper [HELPER_NAME]', 'Creates a new helper'
@@ -47,7 +54,21 @@ class ScaffoldingCommands < Thor
47
54
  type: :boolean, required: false, desc: 'This will delete the selected helper', aliases: '-d'
48
55
 
49
56
  def helper(name)
50
- handle_scaffolding(name, 'helper')
57
+ return delete_scaffolding(name, 'helper') if options[:delete]
58
+
59
+ generate_scaffolding(name, 'helper', options[:path])
60
+ end
61
+
62
+ desc 'steps [STEPS_NAME]', 'Creates a new steps definition'
63
+ option :path,
64
+ type: :string, required: false, desc: 'The path where your steps will be created', aliases: '-p'
65
+ option :delete,
66
+ type: :boolean, required: false, desc: 'This will delete the selected steps', aliases: '-d'
67
+
68
+ def steps(name)
69
+ return delete_scaffolding(name, 'steps') if options[:delete]
70
+
71
+ generate_scaffolding(name, 'steps', options[:path])
51
72
  end
52
73
 
53
74
  desc 'scaffold [SCAFFOLD_NAME]', 'It generates everything needed to start automating'
@@ -57,46 +78,23 @@ class ScaffoldingCommands < Thor
57
78
  Scaffolding.new([name, load_config_path('spec')]).generate_spec
58
79
  else
59
80
  Scaffolding.new([name, load_config_path('feature')]).generate_feature
81
+ Scaffolding.new([name, load_config_path('steps')]).generate_steps
60
82
  end
61
- Scaffolding.new([name, load_config_path('page')]).generate_class
83
+ Scaffolding.new([name, load_config_path('page')]).generate_page
62
84
  end
63
85
 
64
- desc 'config', 'Creates configuration file'
65
- option :delete,
66
- type: :boolean, required: false, desc: 'This will delete the config file', aliases: '-d'
67
-
68
86
  no_commands do
69
87
  def load_config_path(type)
70
88
  YAML.load_file('config/config.yml')["#{type}_path"] if Pathname.new('config/config.yml').exist?
71
89
  end
72
90
 
73
- def handle_scaffolding(name, type)
74
- path = options[:path] || load_config_path(type)
75
- scaffolding = Scaffolding.new([name, path])
76
-
77
- if options[:delete]
78
- case type
79
- when 'page'
80
- scaffolding.delete_class
81
- when 'feature'
82
- scaffolding.delete_feature
83
- when 'spec'
84
- scaffolding.delete_spec
85
- when 'helper'
86
- scaffolding.delete_helper
87
- end
88
- else
89
- case type
90
- when 'page'
91
- scaffolding.generate_class
92
- when 'feature'
93
- scaffolding.generate_feature
94
- when 'spec'
95
- scaffolding.generate_spec
96
- when 'helper'
97
- scaffolding.generate_helper
98
- end
99
- end
91
+ def delete_scaffolding(name, type)
92
+ Scaffolding.new([name]).send("delete_#{type}")
93
+ end
94
+
95
+ def generate_scaffolding(name, type, path)
96
+ path ||= load_config_path(type)
97
+ Scaffolding.new([name, path]).send("generate_#{type}")
100
98
  end
101
99
  end
102
100
  end
@@ -4,6 +4,13 @@
4
4
  def initialize(browser)
5
5
  @browser = browser
6
6
  end
7
+ <% elsif axe? %>
8
+ attr_reader :driver
9
+ alias page driver
10
+
11
+ def initialize(driver)
12
+ @driver = driver
13
+ end
7
14
  <% else %>
8
15
  attr_reader :driver
9
16
 
@@ -14,6 +14,7 @@ class Login < Page
14
14
  password_field.send_keys password
15
15
  login_button.click
16
16
  end
17
+ alias log_as login
17
18
 
18
19
  private
19
20
 
@@ -9,6 +9,7 @@ class Generator < Thor::Group
9
9
  argument :framework
10
10
  argument :name
11
11
  argument :visual_automation, optional: true
12
+ argument :axe_support, optional: true
12
13
 
13
14
  def self.source_paths
14
15
  base_path = File.dirname(__FILE__)
@@ -46,7 +47,7 @@ class Generator < Thor::Group
46
47
  end
47
48
 
48
49
  def visual?
49
- initializer.first.last
50
+ args[3]
50
51
  end
51
52
 
52
53
  def watir?
@@ -57,6 +58,10 @@ class Generator < Thor::Group
57
58
  (args & (%w[selenium watir])).count.positive?
58
59
  end
59
60
 
61
+ def axe?
62
+ args.last
63
+ end
64
+
60
65
  private
61
66
 
62
67
  def _initializer
@@ -18,7 +18,8 @@ module InvokeGenerators
18
18
  framework: framework,
19
19
  generator: generator,
20
20
  name: structure[:name],
21
- visual: structure[:visual]
21
+ visual: structure[:visual],
22
+ axe_support: structure[:axe_support]
22
23
  })
23
24
  end
24
25
  end
@@ -32,6 +33,7 @@ module InvokeGenerators
32
33
  .new([structure[:automation],
33
34
  structure[:framework],
34
35
  structure[:name],
35
- structure[:visual]]).invoke_all
36
+ structure[:visual],
37
+ structure[:axe_support]]).invoke_all
36
38
  end
37
39
  end
@@ -22,7 +22,11 @@ class MenuGenerator
22
22
  end
23
23
 
24
24
  def choose_visual_automation
25
- prompt.select('Do you want to add visual automation with applitools?', visual_automation_menu_choices)
25
+ prompt.select('Do you want to add visual automation with Applitools?', yes_no_menu_choices)
26
+ end
27
+
28
+ def choose_axe_support
29
+ prompt.select('Do you want to add Axe accessibility testing tool?', yes_no_menu_choices)
26
30
  end
27
31
 
28
32
  def choose_test_framework(automation)
@@ -37,7 +41,8 @@ class MenuGenerator
37
41
  automation: options[:automation],
38
42
  framework: options[:framework],
39
43
  name: @name,
40
- visual: options[:visual_automation]
44
+ visual: options[:visual_automation],
45
+ axe_support: options[:axe_support]
41
46
  }
42
47
  generate_framework(structure)
43
48
  system "cd #{name} && gem install bundler && bundle install"
@@ -69,22 +74,32 @@ class MenuGenerator
69
74
  end
70
75
  end
71
76
 
72
- FrameworkOptions = Struct.new(:automation, :framework, :visual_automation)
77
+ FrameworkOptions = Struct.new(:automation, :framework, :visual_automation, :axe_support)
73
78
 
74
79
  def create_framework_options(params)
75
- FrameworkOptions.new(params[:automation], params[:framework], params[:visual_automation])
80
+ FrameworkOptions.new(params[:automation], params[:framework], params[:visual_automation], params[:axe_support])
76
81
  end
77
82
 
78
83
  def create_framework(framework, automation_type)
79
84
  visual_automation = choose_visual_automation if %w[selenium].include?(automation_type)
85
+ axe = choose_axe_support if automation_type == 'selenium' && framework == 'Rspec' && visual_automation == false
80
86
  options = create_framework_options(automation: automation_type,
81
87
  framework: framework.downcase,
82
- visual_automation: visual_automation)
88
+ visual_automation: visual_automation,
89
+ axe_support: axe)
90
+
91
+ # Print the chosen options
92
+ puts 'Chosen Options:'
93
+ puts " Automation Type: #{options[:automation]}"
94
+ puts " Framework: #{options[:framework]}"
95
+ puts " Visual Automation: #{options[:visual_automation]}"
96
+ puts " Axe Support: #{options[:axe_support]}"
97
+
83
98
  set_up_framework(options)
84
99
  prompt.say("You have chosen to use #{framework} with #{automation_type}")
85
100
  end
86
101
 
87
- def visual_automation_menu_choices
102
+ def yes_no_menu_choices
88
103
  {
89
104
  Yes: -> { true },
90
105
  No: -> { false },
@@ -14,4 +14,10 @@ class RspecGenerator < Generator
14
14
 
15
15
  template('spec.tt', "#{name}/spec/pdp_page_spec.rb")
16
16
  end
17
+
18
+ def generate_account_spec
19
+ return unless visual?
20
+
21
+ template('spec.tt', "#{name}/spec/account_page_spec.rb")
22
+ end
17
23
  end
@@ -6,6 +6,34 @@ require_relative '../models/model_factory'
6
6
  require_relative '../page_objects/pages/account'
7
7
  require_relative '../page_objects/pages/login'
8
8
 
9
+ <%- if axe? %>
10
+ describe 'Login' do
11
+ let(:login) { Login.new(driver) }
12
+ let(:account) { Account.new(driver) }
13
+ let(:user) { ModelFactory.for('users')['registered user'] }
14
+
15
+ before do
16
+ login.visit
17
+ login.log_as(user['username'], user['password'])
18
+ end
19
+
20
+ context 'with a login user on the account page' do
21
+ it 'no accessibility errors are present on the page' do
22
+ expect(account.page).to be_axe_clean
23
+ end
24
+
25
+ it 'no accessibility errors are present on the transaction history' do
26
+ transaction_history = '.dash-tile.dash-tile-balloon.clearfix'
27
+ expect(account.page).to be_axe_clean.within transaction_history
28
+ end
29
+
30
+ it 'no accessibility errors are present on the heading' do
31
+ heading = '.maintext'
32
+ expect(account.page).to be_axe_clean.within heading
33
+ end
34
+ end
35
+ end
36
+ <%- elsif %w[selenium watir].include? automation -%>
9
37
  describe 'Login' do
10
38
  subject(:header) { account_page.header.customer_name }
11
39
 
@@ -42,6 +70,7 @@ describe 'Login' do
42
70
  end
43
71
  end
44
72
  end
73
+ <%- end -%>
45
74
  <%- elsif automation == 'sparkling_ios' -%>
46
75
  require_relative '../helpers/spec_helper'
47
76
  require_relative '../page_objects/pages/home'
@@ -7,6 +7,10 @@ gem 'allure-cucumber'
7
7
  gem 'allure-rspec'
8
8
  gem 'allure-ruby-commons'
9
9
  <% end -%>
10
+ <% if axe? -%>
11
+ gem 'axe-core-rspec'
12
+ gem 'axe-core-selenium'
13
+ <% end -%>
10
14
  <% if visual_automation -%>
11
15
  gem 'eyes_selenium', '~> 4.6', '>= 4.6.1'
12
16
  gem 'eyes_universal', '~> 3.3', '>= 3.3.1'
@@ -1,8 +1,4 @@
1
- require 'yaml'
2
-
3
- desc 'Selects browser for automation run'
4
- task :select_browser, [:browser] do |_t, args|
5
- config = YAML.load_file('config/config.yml')
6
- config['browser'] = args.browser
7
- File.write('config/config.yml', config.to_yaml)
8
- end
1
+ desc 'Print Ruby Raider version'
2
+ task :raider do
3
+ system 'raider version'
4
+ end
@@ -1,29 +1,25 @@
1
1
  # Ruby Raider
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/ruby_raider.svg)](https://badge.fury.io/rb/ruby_raider)
4
- [![Rubocop](https://github.com/RubyRaider/ruby_raider/actions/workflows/rspec.yml/badge.svg)](https://github.com/RubyRaider/ruby_raider/actions/workflows/rspec.yml)
5
- [![Gitter](https://badges.gitter.im/RubyRaider/community.svg)](https://gitter.im/RubyRaider/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
6
-
7
3
  <!-- PROJECT LOGO -->
8
4
  <br />
9
5
  <div align="center">
10
- <a href="https://github.com/RubyRaider/ruby_raider">
11
- <img src="https://rubyraiderdotcom.files.wordpress.com/2022/05/logo_transparent_background-1.png" alt="Logo">
12
- </a>
13
- <h1 align="center">Ruby Raider</h1>
14
- <p align="center">
15
- This is a gem to make setup and start of UI automation projects easier.
16
- <br />
17
- <a href="https://github.com/RubyRaider/ruby_raider#getting-started"><strong>Explore the docs »</strong></a>
18
- <br />
19
- <br />
20
- <a href="https://rubygems.org/gems/ruby_raider">Rubygems</a>
21
- ·
22
- <a href="https://github.com/RubyRaider/ruby_raider/issues">Report Bug</a>
23
- ·
24
- <a href="https://github.com/RubyRaider/ruby_raider/issues">Request Feature</a>
25
- </p>
26
- <p align="center"> For more information and updates on releases, see <a href="https://ruby-raider.com">https://ruby-raider.com</a></p>
6
+ <a href="https://github.com/RubyRaider/ruby_raider">
7
+ <img src="https://rubyraiderdotcom.files.wordpress.com/2022/05/logo_transparent_background-1.png" alt="Logo">
8
+ </a>
9
+ <h1 align="center">Ruby Raider</h1>
10
+ <p align="center">
11
+ This is a gem to make setup and start of UI automation projects easier.
12
+ <br />
13
+ <a href="https://github.com/RubyRaider/ruby_raider#getting-started"><strong>Explore the docs »</strong></a>
14
+ <br />
15
+ <br />
16
+ <a href="https://rubygems.org/gems/ruby_raider">Rubygems</a>
17
+ ·
18
+ <a href="https://github.com/RubyRaider/ruby_raider/issues">Report Bug</a>
19
+ ·
20
+ <a href="https://github.com/RubyRaider/ruby_raider/issues">Request Feature</a>
21
+ </p>
22
+ <p align="center"> For more information and updates on releases, see <a href="https://ruby-raider.com">https://ruby-raider.com</a></p>
27
23
  </div>
28
24
 
29
25
  ## What is Ruby Raider?
@@ -39,7 +35,7 @@ Ruby Raider is a generator and scaffolding gem to make UI test automation easier
39
35
  | Rspec and Watir | | Rspec and Appium for Android |
40
36
  | | | Cucumber and Appium Cross-platform |
41
37
  | | | Rspec and Appium Cross-platform |
42
- | | | Cucumber and Sparkling Watir for IOS |
38
+ | | | Cucumber and Sparkling Watir for IOS |
43
39
  | | | Rspec and Sparkling Watir for IOS |
44
40
 
45
41
 
@@ -86,46 +82,45 @@ Select the ones you will like to work with.
86
82
 
87
83
  ```ruby
88
84
  Commands:
89
- raider generate # Provides access to all the generators commands
90
- raider help [COMMAND] # Describe available commands or one specific command
91
- raider new [PROJECT_NAME] # Creates a new framework based on settings picked
92
- raider open_ai # Provides access to all the open ai commands
93
- raider utility # Provides access to all the utility commands
94
- raider version # It shows the version of Ruby Raider you are currently using
85
+ raider generate # Provides access to all the scaffolding commands
86
+ raider help [COMMAND] # Describe available commands or one specific command
87
+ raider new [PROJECT_NAME] # Creates a new framework based on settings picked
88
+ raider utility # Provides access to all the utility commands
89
+ raider version # It shows the version of Ruby Raider you are currently using
95
90
  ```
96
91
 
97
92
  All the basic commands have their corresponding shortcut:
98
93
 
99
94
  * g for generate
100
95
  * n for new
101
- * o for open_ai
102
96
  * u for utility
103
97
  * v for version
104
98
 
99
+ ### Scaffolding Commands
100
+ Ruby Raider also supports scaffolding:
101
+
102
+ * To create a new page object you do: ```raider g page [PAGE_NAME]```
103
+ * To create a new spec you do: ```raider g spec [SPEC_NAME]```
104
+ * To create a new feature you do: ```raider g feature [FEATURE_NAME]```
105
+ * To create a new steps definition you do: ```raider g steps [STEPS_NAME]```
106
+ * To create both a page/spec or a page/feature/steps you do: ```raider g scaffold [SCAFFOLD_NAME]```
107
+
108
+ It's possible to add the option --path or -p if you want to specify where to create your features, pages, helpers and
109
+ specs.
110
+
111
+ If you want to set the default path for the creation of your features, helpers and specs:
105
112
 
106
- ### Appium Server Command
107
- To initialise Appium server run this command:
108
113
  ```ruby
109
- raider u start_appium
114
+ raider u path [PATH_NAME] - -feature or -f
115
+ raider u path [PATH_NAME] - -spec or -s
116
+ raider u path [PATH_NAME] - -helper or -h
110
117
  ```
111
118
 
112
- ### Open AI Commands
119
+ If you don't specify an option, path will assume you want to change the default path for pages.
113
120
 
114
- ```ruby
115
- # Will print the result of the request on the terminal
116
- raider o make [REQUEST]
117
- # Will create a file with the result of your request as content
118
- raider o make [REQUEST] - -path or -p [PATH]
119
- # Will input the content of the chosen file into open ai and will edit it based on the result
120
- raider o make [PATH_NAME] - -edit or -e [FILE_PATH]
121
- # Creates a cucumber file and uses it to input into open ai and create a steps file
122
- # The prompt is required
123
- raider o cucumber [NAME] - -prompt or -p [PROMPT]
124
- # Creates a cucumber step definitions file based on an scenario file
125
- raider open_ai steps [NAME]
126
- Options :
127
- -p, [--path = PATH] # The path where your steps will be created
128
- -pr, [--prompt = PROMPT] # This will create the selected steps based on your prompt using open ai
129
- -i, [--input = INPUT] # It uses a file as input to create the steps
130
121
 
122
+ ### Appium Server Command
123
+ To initialise Appium server run this command:
124
+ ```ruby
125
+ raider u start_appium
131
126
  ```
@@ -21,6 +21,9 @@ module DriverHelper
21
21
  end
22
22
  <%- else -%>
23
23
  # frozen_string_literal: true
24
+ <% if axe? -%>
25
+ require 'axe-selenium'
26
+ <% end -%>
24
27
  require 'yaml'
25
28
  <% if automation == 'selenium' -%>
26
29
  require 'active_support/inflector'
@@ -30,10 +33,14 @@ require 'appium_lib'
30
33
  <% end -%>
31
34
 
32
35
  module DriverHelper
33
- <% if automation == 'selenium' -%>
36
+ <% if automation == 'selenium' && axe? == false -%>
34
37
  def driver(*opts)
35
38
  @driver ||= create_driver(*opts)
36
39
  end
40
+ <% elsif axe? == true -%>
41
+ def driver(browser = :chrome, js_path = nil, skip_iframes = nil)
42
+ @driver ||= create_driver(browser, js_path, skip_iframes)
43
+ end
37
44
  <% else -%>
38
45
  def driver
39
46
  @driver ||= create_driver
@@ -1,4 +1,11 @@
1
- <% if automation == 'selenium' -%>
1
+ <% if automation == 'selenium' && axe? == true -%>
2
+ def create_driver(browser, js_path, skip_iframes)
3
+ AxeSelenium.configure(browser) do |config|
4
+ config.jslib_path = js_path if js_path
5
+ config.skip_iframes = skip_iframes if skip_iframes
6
+ end.page
7
+ end
8
+ <% elsif automation == 'selenium' -%>
2
9
  def create_driver(*opts)
3
10
  @config = YAML.load_file('config/config.yml')
4
11
  browser = @config['browser'].to_sym
@@ -22,7 +29,6 @@
22
29
  driver_options.each { |opt| options.add_option(opt.first, opt.last) }
23
30
  options
24
31
  end
25
-
26
32
  <% elsif automation == 'cross_platform' -%>
27
33
  def create_driver
28
34
  platform = config['platform'].to_s
@@ -30,6 +30,9 @@ end
30
30
  <%- else -%>
31
31
  # frozen_string_literal: true
32
32
 
33
+ <%- if axe? %>
34
+ require 'axe-rspec'
35
+ <%- end -%>
33
36
  require 'rspec'
34
37
  require 'tmpdir'
35
38
  require_relative 'allure_helper'
data/lib/ruby_raider.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../lib/commands/open_ai_commands'
4
3
  require_relative '../lib/commands/scaffolding_commands'
5
4
  require_relative '../lib/commands/utility_commands'
6
5
 
@@ -19,26 +18,21 @@ module RubyRaider
19
18
  desc 'version', 'It shows the version of Ruby Raider you are currently using'
20
19
 
21
20
  def version
22
- puts "The version is #{parsed_version}, happy testing!"
21
+ puts "The version is #{current_version}, happy testing!"
23
22
  end
24
23
 
25
24
  map 'v' => 'version'
26
25
 
27
- desc 'generate', 'Provides access to all the generator commands'
26
+ desc 'generate', 'Provides access to all the scaffolding commands'
28
27
  subcommand 'generate', ScaffoldingCommands
29
28
  map 'g' => 'generate'
30
29
 
31
- desc 'open_ai', 'Provides access to all the open ai commands'
32
- subcommand 'open_ai', OpenAiCommands
33
- map 'o' => 'open_ai'
34
-
35
30
  desc 'utility', 'Provides access to all the utility commands'
36
31
  subcommand 'utility', UtilityCommands
37
32
  map 'u' => 'utility'
38
33
 
39
34
  no_commands do
40
- def gemspec = Gem::Specification.load('ruby_raider.gemspec')
41
- def parsed_version = Gem::Version.new(gemspec.version)
35
+ def current_version = File.read(File.expand_path('version', __dir__)).strip
42
36
  end
43
37
  end
44
38
  end
@@ -12,8 +12,8 @@ class Scaffolding < Thor::Group
12
12
  "#{File.dirname(__FILE__)}/templates"
13
13
  end
14
14
 
15
- def generate_class
16
- template('page_object.tt', default_path("page_objects/pages/#{name}_page.rb", '_page.rb'))
15
+ def generate_page
16
+ template('page_object.tt', default_path("page_objects/pages/#{name}.rb", '_page.rb'))
17
17
  end
18
18
 
19
19
  def generate_feature
@@ -21,20 +21,24 @@ class Scaffolding < Thor::Group
21
21
  end
22
22
 
23
23
  def generate_spec
24
- template('spec.tt', default_path("spec/#{name}_spec.rb", '_spec.rb'))
24
+ template('spec.tt', default_path("spec/#{name}_page_spec.rb", '_spec.rb'))
25
25
  end
26
26
 
27
27
  def generate_helper
28
28
  template('helper.tt', default_path("helpers/#{name}_helper.rb", '_helper.rb'))
29
29
  end
30
30
 
31
+ def generate_steps
32
+ template('steps.tt', default_path("features/step_definitions/#{name}_steps.rb", '_steps.rb'))
33
+ end
34
+
31
35
  def generate_config
32
36
  template('../../generators/templates/common/config.tt',
33
37
  default_path('config/config.yml', '.yml'))
34
38
  end
35
39
 
36
- def delete_class
37
- remove_file(default_path("page_objects/pages/#{name}_page.rb", '_page.rb'))
40
+ def delete_page
41
+ remove_file(default_path("page_objects/pages/#{name}.rb", '_page.rb'))
38
42
  end
39
43
 
40
44
  def delete_feature
@@ -42,13 +46,17 @@ class Scaffolding < Thor::Group
42
46
  end
43
47
 
44
48
  def delete_spec
45
- remove_file(default_path("spec/#{name}_spec.rb", '_spec.rb'))
49
+ remove_file(default_path("spec/#{name}_page_spec.rb", '_spec.rb'))
46
50
  end
47
51
 
48
52
  def delete_helper
49
53
  remove_file(default_path("helpers/#{name}_helper.rb", '_helper.rb'))
50
54
  end
51
55
 
56
+ def delete_steps
57
+ remove_file(default_path("features/step_definitions/#{name}_steps.rb", '_steps.rb'))
58
+ end
59
+
52
60
  def delete_config
53
61
  remove_file(default_path('config/config.yml', '.yml'))
54
62
  end
@@ -1,4 +1,4 @@
1
- Feature: <%= name %>
1
+ Feature: <%= name.capitalize %>
2
2
 
3
3
  Scenario: Scenario name
4
4
  Given I am
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../abstract/abstract_page'
3
+ require_relative '../abstract/page'
4
4
 
5
- class <%= name.split('_').map {|word| word.capitalize }.join + 'Page' %> < AbstractPage
5
+ class <%= name.split('_').map {|word| word.capitalize }.join %> < Page
6
6
 
7
7
  # Actions
8
8
 
@@ -1,5 +1,4 @@
1
- require_relative 'base_spec'
2
- require_relative '../page_objects/pages/<%= name %>_page'
1
+ require_relative '../page_objects/pages/<%= name %>'
3
2
 
4
- describe <%= name.split('_').map {|word| word.capitalize }.join + 'Page' %> do
3
+ describe '<%= name.split('_').map {|word| word.capitalize }.join %>' do
5
4
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../page_objects/pages/<%= name %>'
4
+
5
+ Given ('') do
6
+ end
7
+
8
+ When ('') do
9
+ end
10
+
11
+ Then ('') do
12
+ end
data/lib/version ADDED
@@ -0,0 +1 @@
1
+ 0.8.8
data/ruby_raider.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ruby_raider'
5
- s.version = '0.8.6'
5
+ s.version = File.read(File.expand_path('lib/version', __dir__)).strip
6
6
  s.summary = 'A gem to make setup and start of UI automation projects easier'
7
7
  s.description = 'This gem has everything you need to start working with test automation'
8
8
  s.authors = ['Agustin Pequeno']
@@ -22,7 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency 'rubocop-rspec', '~> 2.9.0'
23
23
 
24
24
  s.add_runtime_dependency 'faraday', '~> 1.10.0'
25
- s.add_runtime_dependency 'ruby-openai', '~> 3.5'
26
25
  s.add_runtime_dependency 'thor', '~> 1.2.1'
27
26
  s.add_runtime_dependency 'tty-prompt', '~> 0.23.1'
28
27
  end
@@ -27,12 +27,12 @@ describe ScaffoldingCommands do
27
27
 
28
28
  it 'scaffolds for rspec creating a spec' do
29
29
  scaffold.new.invoke(:scaffold, nil, %W[#{name}])
30
- expect(Pathname.new("spec/#{name}_spec.rb")).to be_file
30
+ expect(Pathname.new("spec/#{name}_page_spec.rb")).to be_file
31
31
  end
32
32
 
33
33
  it 'scaffolds for rspec creating a page' do
34
34
  scaffold.new.invoke(:scaffold, nil, %W[#{name}])
35
- expect(Pathname.new("page_objects/pages/#{name}_page.rb")).to be_file
35
+ expect(Pathname.new("page_objects/pages/#{name}.rb")).to be_file
36
36
  end
37
37
 
38
38
  it 'deletes a spec' do
@@ -47,7 +47,7 @@ describe ScaffoldingCommands do
47
47
 
48
48
  it 'creates a page' do
49
49
  scaffold.new.invoke(:page, nil, %W[#{name}])
50
- expect(Pathname.new("page_objects/pages/#{name}_page.rb")).to be_file
50
+ expect(Pathname.new("page_objects/pages/#{name}.rb")).to be_file
51
51
  end
52
52
 
53
53
  it 'creates a page with a path' do
@@ -77,7 +77,12 @@ describe ScaffoldingCommands do
77
77
 
78
78
  it 'scaffolds for cucumber creating a page' do
79
79
  scaffold.new.invoke(:scaffold, nil, %W[#{name}])
80
- expect(Pathname.new("page_objects/pages/#{name}_page.rb")).to be_file
80
+ expect(Pathname.new("page_objects/pages/#{name}.rb")).to be_file
81
+ end
82
+
83
+ it 'scaffolds for cucumber creating a steps definition' do
84
+ scaffold.new.invoke(:scaffold, nil, %W[#{name}])
85
+ expect(Pathname.new("features/step_definitions/#{name}_steps.rb")).to be_file
81
86
  end
82
87
 
83
88
  it 'creates a helper' do
@@ -85,6 +90,11 @@ describe ScaffoldingCommands do
85
90
  expect(Pathname.new("helpers/#{name}_helper.rb")).to be_file
86
91
  end
87
92
 
93
+ it 'creates a steps definition' do
94
+ scaffold.new.invoke(:steps, nil, %W[#{name}])
95
+ expect(Pathname.new("features/step_definitions/#{name}_steps.rb")).to be_file
96
+ end
97
+
88
98
  it 'deletes a page' do
89
99
  scaffold.new.invoke(:page, nil, %w[login --delete])
90
100
  expect(Pathname.new('page_objects/pages/login_page.rb')).not_to be_file
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,7 @@ RSpec.configure do |config|
15
15
  FRAMEWORKS.each do |framework|
16
16
  AUTOMATION_TYPES.each do |automation|
17
17
  [true, false].each do |visual|
18
- settings = create_settings(framework: framework, automation: automation, visual: visual)
18
+ settings = create_settings(framework: framework, automation: automation, visual: visual, axe: axe_support)
19
19
  generate_framework(settings)
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_raider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agustin Pequeno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-26 00:00:00.000000000 Z
11
+ date: 2024-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -122,20 +122,6 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.10.0
125
- - !ruby/object:Gem::Dependency
126
- name: ruby-openai
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '3.5'
132
- type: :runtime
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '3.5'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: thor
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -176,6 +162,7 @@ files:
176
162
  - ".github/ISSUE_TEMPLATE/feature_request.md"
177
163
  - ".github/auto_assign-issues.yml"
178
164
  - ".github/workflows/integration.yml"
165
+ - ".github/workflows/push_gem.yml"
179
166
  - ".github/workflows/reek.yml"
180
167
  - ".github/workflows/rubocop.yml"
181
168
  - ".github/workflows/system.yml"
@@ -189,7 +176,6 @@ files:
189
176
  - README.md
190
177
  - Rakefile
191
178
  - bin/raider
192
- - lib/commands/open_ai_commands.rb
193
179
  - lib/commands/scaffolding_commands.rb
194
180
  - lib/commands/utility_commands.rb
195
181
  - lib/generators/actions/actions_generator.rb
@@ -262,17 +248,17 @@ files:
262
248
  - lib/generators/templates/helpers/spec_helper.tt
263
249
  - lib/generators/templates/helpers/visual_helper.tt
264
250
  - lib/generators/templates/helpers/visual_spec_helper.tt
265
- - lib/open_ai/open_ai.rb
266
251
  - lib/ruby_raider.rb
267
252
  - lib/scaffolding/scaffolding.rb
268
253
  - lib/scaffolding/templates/feature.tt
269
254
  - lib/scaffolding/templates/helper.tt
270
255
  - lib/scaffolding/templates/page_object.tt
271
256
  - lib/scaffolding/templates/spec.tt
257
+ - lib/scaffolding/templates/steps.tt
272
258
  - lib/utilities/logger.rb
273
259
  - lib/utilities/utilities.rb
260
+ - lib/version
274
261
  - ruby_raider.gemspec
275
- - spec/integration/commands/open_ai_commands_spec.rb
276
262
  - spec/integration/commands/scaffolding_commands_spec.rb
277
263
  - spec/integration/commands/utility_commands_spec.rb
278
264
  - spec/integration/generators/actions_generator_spec.rb
@@ -303,7 +289,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
303
289
  - !ruby/object:Gem::Version
304
290
  version: '0'
305
291
  requirements: []
306
- rubygems_version: 3.4.10
292
+ rubygems_version: 3.5.3
307
293
  signing_key:
308
294
  specification_version: 4
309
295
  summary: A gem to make setup and start of UI automation projects easier
@@ -1,85 +0,0 @@
1
- require 'thor'
2
- require 'faraday'
3
- require_relative '../open_ai/open_ai'
4
-
5
- class OpenAiCommands < Thor
6
- desc 'make [REQUEST]', 'Uses open AI to create a file or generate output'
7
- option :path,
8
- type: :string, required: false, desc: 'The path where your file will be created', aliases: '-p'
9
- option :edit,
10
- type: :string, required: false, desc: 'Path to the file you want to edit', aliases: '-e'
11
-
12
- def make(request, path = nil)
13
- path ||= options[:path]
14
- edit_path = options[:edit]
15
- if edit_path
16
- pp 'Editing File...'
17
- OpenAi.edit_file(path: edit_path, request: request)
18
- pp "File #{edit_path} edited"
19
- elsif path
20
- pp 'Generating File...'
21
- OpenAi.create_file(path: path, request: request)
22
- pp "File created in #{path}"
23
- else
24
- puts OpenAi.output(request: request)
25
- end
26
- end
27
-
28
- desc 'cucumber [NAME]', 'Creates feature and step files only using open ai'
29
- option :prompt,
30
- type: :string,
31
- required: true, desc: 'The prompt for open ai', aliases: '-p'
32
-
33
- def cucumber(name)
34
- feature_path = "features/#{name}.feature"
35
- make(options[:prompt], feature_path)
36
- prompt_step = "create cucumber steps for the following scenarios in ruby #{File.read(feature_path)}"
37
- make(prompt_step, "features/step_definitions/#{name}_steps.rb")
38
- end
39
-
40
- desc 'steps [NAME]', 'Creates a new step definitions file'
41
- option :path,
42
- type: :string,
43
- required: false, desc: 'The path where your steps will be created', aliases: '-p'
44
- option :prompt,
45
- type: :string, required: false,
46
- desc: 'This will create the selected steps based on your prompt using open ai', aliases: '-pr'
47
- option :input,
48
- type: :string,
49
- required: false, desc: 'It uses a file as input to create the steps', aliases: '-i'
50
-
51
- def steps(name)
52
- path = 'features/step_definitions'
53
- input = options[:input]
54
- if input
55
- prompt = options[:prompt] || 'create cucumber steps for the following scenarios in ruby'
56
- content = "#{prompt} #{File.read(input)}"
57
- make(content, "#{path}/#{name}_steps.rb")
58
- else
59
- make(options[:open_ai], "#{path}/#{name}_steps.rb")
60
- end
61
- end
62
-
63
- desc 'test', 'Uses open AI to create a file or generate output'
64
- def test
65
- conn = Faraday.new(url: 'https://api.openai.com') do |faraday|
66
- faraday.headers['Content-Type'] = 'application/json'
67
- faraday.headers['Authorization'] = "Bearer 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"
68
- faraday.headers['OpenAI-Beta'] = 'assistants=v1'
69
- end
70
-
71
- # Data payload for the POST request
72
- payload = {
73
- instructions: "You are a personal math tutor. When asked a question, write and run Python code to answer the question.",
74
- name: "Math Tutor",
75
- tools: [{ type: "code_interpreter" }],
76
- model: "gpt-4-1106-preview"
77
- }
78
-
79
- # Perform the POST request
80
- response = conn.post('/v1/assistants', payload.to_json)
81
-
82
- # Output the response body
83
- puts response.body
84
- end
85
- end
@@ -1,67 +0,0 @@
1
- require 'openai'
2
- require 'fileutils'
3
-
4
- module OpenAi
5
- class << self
6
- def client
7
- @client ||= create_client
8
- end
9
-
10
- def create_client
11
- configure_client
12
- OpenAI::Client.new
13
- end
14
-
15
- def configure_client
16
- OpenAI.configure do |config|
17
- config.access_token = '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'
18
- config.organization_id = ENV.fetch('OPENAI_ORGANIZATION_ID', nil)
19
- end
20
- end
21
-
22
- def input(request, model = 'gpt-4', temperature = 0.7)
23
- client.chat(
24
- parameters: {
25
- model: model,
26
- messages: [{ role: 'user', content: request }],
27
- temperature: temperature
28
- })
29
- end
30
-
31
- def create_file(options)
32
- path, request, choice = options.values_at(:path, :request, :choice)
33
- File.write(path, output(request: request, choice: choice))
34
- end
35
-
36
- def output(options)
37
- request, choice = options.values_at(:request, :choice)
38
- choice ||= 0
39
- extract_text(input(request), 'choices', choice, 'message', 'content')
40
- end
41
-
42
- def edit_file(options)
43
- path, request, choice = options.values_at(:path, :request, :choice)
44
- content = File.read(path)
45
- response = edit(content: content, request: request)
46
- File.write(path, extract_text(response, 'choices', choice, 'text'))
47
- end
48
-
49
- def edit(options)
50
- content, request, model = options.values_at(:content, :request, :model)
51
- model ||= 'text-davinci-edit-001'
52
- client.edits(
53
- parameters: {
54
- model: model,
55
- input: content,
56
- instruction: request
57
- }
58
- )
59
- end
60
-
61
- private
62
-
63
- def extract_text(response, *keys)
64
- response.dig(*keys)
65
- end
66
- end
67
- end
@@ -1,37 +0,0 @@
1
- # require 'dotenv'
2
- # require 'fileutils'
3
- # require 'pathname'
4
- # require 'yaml'
5
- # require_relative '../../../lib/generators/common_generator'
6
- # require_relative '../../../lib/integration.commands/open_ai_commands'
7
- # require_relative '../../../lib/scaffolding/scaffolding'
8
- # require_relative '../../spec_helper'
9
- #
10
- # describe OpenAiCommands do
11
- # let(:open_ai) { described_class }
12
- # let(:name) { 'test' }
13
- #
14
- # orig_dir = Dir.pwd
15
- # Dotenv.load
16
- #
17
- # after do
18
- # Dir.chdir orig_dir
19
- # end
20
- #
21
- # context 'without any project' do
22
- # after do
23
- # FileUtils.rm_rf('joke.txt')
24
- # end
25
- #
26
- # # TODO: Enable test once the paid account is setup
27
- # # it 'creates a file using open ai' do
28
- # # open_ai.new.invoke(:make, nil, ['tell me a joke', '--path', 'joke.txt'])
29
- # # expect(File).to be_size('joke.txt')
30
- # # end
31
- #
32
- # # it 'edits an existing file using open ai' do
33
- # # FileUtils.touch('joke.txt')
34
- # # open_ai.new.invoke(:make, nil, ['tell me a better joke', '--edit', 'joke.txt'])
35
- # # end
36
- # end
37
- # end