qlive-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # Qlive-Rails
2
+
3
+ Qlive-Rails is a Ruby on Rails engine for running qunit javascript tests using server-side factories and user login.
4
+
5
+
6
+ Using the [qlive](https://github.com/proxv/qlive) gem, it provides hooks for setting server state
7
+ before the request is processed by your app, so you can do things like popuplate the page's content with
8
+ your favorite fixtures library (like factory_girl) and log in a user.
9
+ Qlive inserts the qunit framework and all of your test sources into the page's response.
10
+
11
+ It is mainly intended to be used for testing javascript-heavy, single-page web applications
12
+ (like those built using backbone, angularjs, emberjs, etc.)
13
+
14
+
15
+ ## Benefits:
16
+
17
+ * Precisely set fixture content and user login state for your qunit tests
18
+ * Run the same tests in a browser or headlessly, alongside your normal integration test suite. (with the [qlive-headless](https://github.com/proxv/qlive-headless) gem)
19
+ * A dashboard page to link to all of your qlive test suites
20
+
21
+
22
+ ## Installation
23
+
24
+ To run qlive headlessly as well as in the browser, use [qlive-headless](https://github.com/proxv/qlive-headless).
25
+
26
+ For browser-only testing against Ruby on Rails 3, do the following:
27
+
28
+ * Add qlive-rails to your Gemfile:
29
+
30
+ ```ruby
31
+ group :development do
32
+ gem 'qlive-rails', :require => 'qlive/engine'
33
+ end
34
+ ```
35
+
36
+
37
+ * Mount the engine in routes.rb:
38
+
39
+ ```ruby
40
+ if Rails.env == 'development'
41
+ mount Qlive::Engine => '/qlive'
42
+ end
43
+ ```
44
+
45
+
46
+ ## Usage
47
+
48
+
49
+ Wiki pages:
50
+
51
+ * [Qlive-suites](https://github.com/proxv/qlive/wiki/qlive-suites) for how to use qlive and create suites.
52
+
53
+ * [Factory_girl Tips](https://github.com/proxv/qlive/wiki/factory-girl-tips) for how to use factory girl in your qlive suites.
54
+
55
+ * [Devise Tips](https://github.com/proxv/qlive/wiki/devise-tips) for logging in users with devise in your qlive suites.
56
+
57
+ * Once you have some qlive suites in place, visit /qlive in your app and follow the links within to run them.
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'Qlive'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+ Bundler::GemHelper.install_tasks
28
+
29
+ require 'rake/testtask'
30
+
31
+ Rake::TestTask.new(:test) do |t|
32
+ t.libs << 'lib'
33
+ t.libs << 'test'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = false
36
+ end
37
+
38
+
39
+ task :default => :test
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require_tree ./suites
3
+ */
@@ -0,0 +1,13 @@
1
+ /*
2
+ *= require_tree ./suites
3
+ *= require_self
4
+ */
5
+
6
+ #qunit-tests li.fail li {
7
+ list-style: none;
8
+ }
9
+
10
+ #qunit-tests ol li a.test-page-link {
11
+ text-decoration: underline;
12
+ color: #333;
13
+ }
@@ -0,0 +1,14 @@
1
+ module Qlive
2
+ class SourcesController < ActionController::Base
3
+
4
+ def show
5
+ base_path = Qlive.setup[:base_path]
6
+ rel_path = params[:rel_path]
7
+ path = File.expand_path("./#{rel_path}#{rel_path.end_with?('.js') ? '' : '.js'}", base_path)
8
+ raise "Illegal path: #{path}" unless path.start_with?(base_path)
9
+ headers['Content-Type'] = 'application/javascript' # serve other types? If so: (Mime::Type.lookup_by_extension(params[:format]).to_s rescue 'text/text')
10
+ render :text => IO.read(path), :status => 200
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Qlive
2
+ class SuitesController < ActionController::Base
3
+
4
+ def index
5
+ Qlive::DevReload.reload_main if Qlive.setup[:gem_dev_mode]
6
+ Qlive::Registry.find_suites
7
+ @suites = Qlive::Registry.suites.keys.map do |suite_name|
8
+ Qlive::Registry.build_suite(suite_name)
9
+ end
10
+ end
11
+
12
+
13
+ end
14
+ end
@@ -0,0 +1,45 @@
1
+ module Qlive
2
+ module SuitesHelper
3
+
4
+ def hrefs_for_suite(suite)
5
+ return [] unless suite.respond_to?(:pages_to_test)
6
+ href_array(suite, suite.pages_to_test)
7
+ end
8
+
9
+
10
+ private
11
+
12
+ def href_array(suite, val)
13
+ if val.nil?
14
+ [ ]
15
+ elsif val.kind_of?(String)
16
+ [ append_suite_command(suite, val) ]
17
+ elsif val.kind_of?(Array)
18
+ val.map { |v| append_suite_command(suite, v)}
19
+ else
20
+ href_array(suite, val.call)
21
+ end
22
+ end
23
+
24
+
25
+ def append_suite_command(suite, href)
26
+ param = "qlive=#{suite.name}"
27
+ # todo: use url/uri library to make this cleaner
28
+ pos = href.index('?')
29
+ if pos
30
+ res = "#{href[0, pos + 1]}#{param}&#{href[(pos + 1)..-1]}"
31
+ else
32
+ pos = href.index('#')
33
+ if pos
34
+ res = "#{href[0, pos]}?#{param}#{href[pos..-1]}"
35
+ else
36
+ res = "#{href}?#{param}"
37
+ end
38
+ end
39
+ res
40
+ end
41
+
42
+
43
+
44
+ end
45
+ end
@@ -0,0 +1,11 @@
1
+ !!! 5
2
+ %html{ :xmlns => "http://www.w3.org/1999/xhtml", :lang => "en", "xml:lang" => "en" }
3
+ %head
4
+ %meta{ :charset => "utf-8" }
5
+ %meta{ "http-equiv" => "X-UA-Compatible", :content => "IE=edge,chrome=1" }
6
+ = stylesheet_link_tag "/qlive/qunit-1.9.0/qunit.css", :media => 'all'
7
+ = stylesheet_link_tag "qlive/suites", :media => 'all'
8
+ %title= 'Qlive Suites'
9
+
10
+ %body
11
+ = yield
@@ -0,0 +1,27 @@
1
+ %h1#qunit-header
2
+ %strong Qlive-Rails
3
+ %h2.qunit-pass#qunit-banner
4
+ -# leave banner empty (its a thin green strip, dunno why they used an h2)
5
+ #qunit-testrunner-toolbar
6
+ = "Found #{pluralize(@suites.length, 'qlive suite')} in #{Qlive.setup[:base_path].sub(Rails.root.to_s + '/', '')} directory tree."
7
+ %h2#qunit-userAgent
8
+ Pages registered to run qunit qlive suites:
9
+
10
+ %ol#qunit-tests
11
+ - if @suites.length > 0
12
+ - @suites.each do |suite|
13
+ - hrefs = hrefs_for_suite(suite)
14
+ - has_links = hrefs.length > 0
15
+ %li{ :class => has_links ? 'pass' : 'fail' }
16
+ %strong.module-name= "Suite '#{suite.name}' has #{pluralize(hrefs.length, 'test page')}."
17
+ %ol
18
+ - if has_links
19
+ - hrefs.each do |href|
20
+ %li.pass
21
+ %a.test-message.test-page-link{ :href => href}= href
22
+ - else
23
+ %li
24
+ .test-message This suite is not declaring any links to pages in your app. <i>Set them with suite#pages_to_test()</i>
25
+ - else
26
+ %li.fail
27
+ %strong No Qlive Suites Found
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Qlive::Engine.routes.draw do
2
+ match '/' => 'qlive/suites#index'
3
+ match '/sources/*rel_path' => 'qlive/sources#show'
4
+ end
@@ -0,0 +1,27 @@
1
+ require 'qlive/rack'
2
+ require 'qlive/dev_reload'
3
+ require 'qlive/suite'
4
+
5
+ module Qlive
6
+ class Engine < Rails::Engine
7
+
8
+ initializer "qlive" do |app|
9
+ Qlive.setup[:base_path] ||= "#{Rails.root}/spec/qunits"
10
+
11
+ puts "Mounting Qlive::Rack to allow qunit testing against your server's backend. (Never use this rack on production systems.)"
12
+ if Qlive.setup[:hand_mounted]
13
+ Qlive.setup[:hand_mounted].call
14
+ else
15
+ app.middleware.insert_after(::ActionDispatch::ParamsParser, Qlive::Rack, {
16
+ :base_path => Qlive.setup[:base_path]
17
+ })
18
+ app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
19
+ end
20
+
21
+ if Qlive.setup[:gem_dev_mode]
22
+ app.middleware.insert_before(::ActionDispatch::ParamsParser, Qlive::DevReload)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Qlive
2
+ VERSION = "0.1.0"
3
+ end
data/lib/qlive.rb ADDED
@@ -0,0 +1,7 @@
1
+ #require 'qlive/headless/matchers'
2
+ #require 'qlive/headless/dsl'
3
+ #require 'qlive/headless/runner'
4
+
5
+ module Qlive
6
+
7
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :qlive do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qlive-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - ProxV
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: qlive
16
+ requirement: &2152342160 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.1'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2152342160
25
+ - !ruby/object:Gem::Dependency
26
+ name: rails
27
+ requirement: &2152340180 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.2'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2152340180
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec-rails
38
+ requirement: &2152337900 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 2.8.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2152337900
47
+ description: Ruby on Rails engine for running qunit javascript tests using server-side
48
+ factories and user login
49
+ email:
50
+ - support@proxv.com
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - app/assets/javascripts/qlive/suites.js
56
+ - app/assets/stylesheets/qlive/suites.css
57
+ - app/controllers/qlive/sources_controller.rb
58
+ - app/controllers/qlive/suites_controller.rb
59
+ - app/helpers/qlive/suites_helper.rb
60
+ - app/views/layouts/qlive/suites.html.haml
61
+ - app/views/qlive/suites/index.html.haml
62
+ - config/routes.rb
63
+ - lib/qlive/engine.rb
64
+ - lib/qlive/version.rb
65
+ - lib/qlive.rb
66
+ - lib/tasks/qlive_tasks.rake
67
+ - Rakefile
68
+ - README.md
69
+ homepage: https://github.com/proxv/qlive-rails/
70
+ licenses: []
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 1.8.10
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Ruby on Rails engine for running qunit javascript tests using server-side
93
+ factories and user login
94
+ test_files: []