tuev 0.3.2

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.
@@ -0,0 +1,88 @@
1
+ <html>
2
+ <head>
3
+ <link rel="stylesheet" href="<%= @qunit_css %>" type="text/css"/>
4
+ <title><%= @test_set_name %></title>
5
+ <!-- test dependencies: jquery, qunit, mockjax ... delete if they conflict
6
+ with your needs -->
7
+ <script type="text/javascript" src="<%= @jquery_js %>"></script>
8
+ <script type="text/javascript" src="<%= @qunit_js %>"></script>
9
+ <script type="text/javascript" src="<%= @mockjax_js %>"></script>
10
+ </head>
11
+ <body>
12
+ <h1 id="qunit-header"><%= @test_set_name %> tests</h1>
13
+ <h2 id="qunit-banner"></h2>
14
+ <h2 id="qunit-userAgent"></h2>
15
+ <ol id="qunit-tests">
16
+ </ol>
17
+ <div id="qunit-fixture"></div>
18
+
19
+ <script type="text/template" id="user-list-template">
20
+ <table id="whitelisted-users-list" class="list whitelisted-users">
21
+ <thead>
22
+ <tr>
23
+ <th>User</th>
24
+ <th>Whitelisted at</th>
25
+ <th>Whitelisted by</th>
26
+ <th>Note</th>
27
+ <th>Action</th></tr>
28
+ </thead>
29
+ </table>
30
+ </script>
31
+
32
+ <script type="text/template" id="list-item-template">
33
+ <tr class="pending-state-{{ pending }}">
34
+ <td>
35
+ <span>
36
+ <a href="http://soundcloud.com/{{ permalink }}" class="user">{{ username }}</a>
37
+ </span>
38
+ </td>
39
+ <td class="created-at">{{ created_at }}</td>
40
+ <td>
41
+ <a href="http://soundcloud.com/{{ whitelisted_by }}">
42
+ {{ whitelisted_by}}
43
+ </a>
44
+ </td>
45
+ <td>
46
+ <a class="cancel-edit-note" href="#/users/{{ APP.user.get('permalink') }}" title="{{ note }}">Cancel edit</a>
47
+ <a class="edit-note" href="#/users/{{ APP.user.get('permalink') }}/whitelist/{{ permalink }}/edit" title="{{ note }}">Edit note</a>
48
+ </td>
49
+ <td><img class="spinner" src="/images/spinner.gif"><button class="revoke">revoke</button></td>
50
+ </tr>
51
+ <tr class="whitelist-note-edit">
52
+ <td colspan="5">
53
+ <p>Notes:</p>
54
+ <form class="note" method="post">
55
+ <textarea name="note">{{ note }}</textarea>
56
+ <input type="submit" id="submit"><img class="spinner" src="/images/spinner.gif">
57
+ </form>
58
+ </td>
59
+ </tr>
60
+ </script>
61
+
62
+ <script type="text/template" id="search-result-item-template">
63
+ <div class="search-result-row">
64
+ <div class="checkbox">&nbsp;<input type="checkbox" name="new-whitelist-users" value="{{ id }}"></div>
65
+ <div class="avatar"><img src="{{ avatar_url_badge }}"></div>
66
+ <div class="description">
67
+ <span class="user-info"><a href="{{ permalink }}" target="_blank" class="user">{{ username }}</a></span>
68
+ <span> ({{ city }} / {{ country }})</span>
69
+ </div>
70
+ </div>
71
+ </script>
72
+
73
+
74
+ <!-- dependencies -->
75
+ <% @dependencies.each do |dependency| %>
76
+ <script type="text/javascript" src="<%= dependency %>"></script>
77
+ <% end %>
78
+
79
+ <!-- tests -->
80
+ <% @test_set.each do |test| %>
81
+ <script type="text/javascript" src="<%= test %>"></script>
82
+ <% end %>
83
+
84
+ <!-- leave this at the bottom sir! -->
85
+ <script type="text/javascript" src="<%= @tuev_qunit_js %>"></script>
86
+
87
+ </body>
88
+ </html>
data/contrib/tuev.yml ADDED
@@ -0,0 +1,37 @@
1
+ # basic selenium stuff
2
+ selenium:
3
+ host: 'localhost' # host which runs selenium server
4
+ port: '4444' # selenium server port (if you get connection refused, try 5555)
5
+ browsers:
6
+ - '*firefox' # should work on most systems
7
+ #- *googlechrome # ... can't get it to work on mac os x or linux
8
+ #- *safari # well: mac os x only
9
+ default_timeout_in_seconds: 15 # requests that take longer fail
10
+
11
+ # define test suite here ... it's basically a Dir.glob-pattern for all test files
12
+ # and dependencies needed by test files
13
+ # qunit will be included automatically ... don't bother
14
+ # If JS-Files need to be loaded in a special order, list them individually ... all
15
+ # paths are relative to the directory from where the test is called (root of your
16
+ # project usually)
17
+ test_suites:
18
+ -
19
+ name: 'qunit_tests'
20
+
21
+ # it should be there ... check it out, adjust it to your needs
22
+ test_file_template: 'tests/tuev/contrib/test_default.html'
23
+ combine_tests: false # whether to create one big test file or one pre js-test-file
24
+ test_files:
25
+ include: 'client/public/javascripts/tests/**/*.js' # Dir.glob-pattern
26
+ exclude: 'mocks.js'
27
+ dependencies:
28
+ include: # include in a specified order
29
+ - 'client/public/javascripts/vendor/underscore-1.1.4.js'
30
+ - 'client/public/javascripts/vendor/backbone-0.3.3.js'
31
+ - 'client/public/javascripts/config/config.js'
32
+ - 'client/public/javascripts/models/*.js'
33
+ - 'client/public/javascripts/controller/*.js'
34
+ - 'client/public/javascripts/views/*.js'
35
+ - 'client/public/javascripts/tests/**/*mocks.js' # Dir.glob-pattern
36
+ - 'client/public/javascripts/vendor/backbone-0.3.3.js'
37
+ - 'client/public/javascripts/vendor/backbone.js'
@@ -0,0 +1,70 @@
1
+ $browsers = ENV['BROWSERS'] && ENV['BROWSERS'].split(",") || ["*firefox", "*safari"]
2
+
3
+ def run_test
4
+ $browsers.each do |browserstring|
5
+ browser = Selenium::Client::Driver.new \
6
+ :host => "localhost",
7
+ :port => 5555,
8
+ :browser => browserstring,
9
+ :url => "http://deck.s-cloud.net",
10
+ :timeout_in_second => 60
11
+
12
+ browser.start_new_browser_session
13
+
14
+ yield(browser)
15
+
16
+ browser.close_current_browser_session
17
+ end
18
+ end
19
+
20
+ def goto_start_state(browser)
21
+ browser.open "/"
22
+ browser.refresh
23
+ browser.wait_for_page_to_load "60000"
24
+ browser.click "link=logout"
25
+ browser.wait_for_page_to_load "60000"
26
+ end
27
+
28
+ def login(browser)
29
+ goto_start_state(browser)
30
+ browser.type "id=login-username", "arms-test"
31
+ browser.type "name=password", "geheim"
32
+ browser.click "css=#login-form input[type=submit]"
33
+ wait{ browser.is_element_present("css=body.logging-in-state") }
34
+ wait{ browser.is_element_present("css=body.whitelist-view-state") }
35
+ end
36
+
37
+ def delete_all_whitelisted_users(browser)
38
+ while browser.is_element_present("css=#whitelisted-users-list tbody.user") do
39
+ browser.click "css=.revoke"
40
+ browser.get_confirmation
41
+ wait{ !browser.is_element_present("css=tr.pending-state-true") }
42
+ end
43
+
44
+ wait(60, "*** error while deleting all whitelist users") do
45
+ !browser.is_element_present("css=#whitelisted-users-list tbody.user")
46
+ end
47
+ end
48
+
49
+ def add_a_user(browser)
50
+ if !browser.is_element_present("css=#whitelisted-users-list tbody.user")
51
+ browser.click "id=show-hide-add-user-dialog"
52
+ wait{ browser.is_element_present("css=body.add-user-state") }
53
+ browser.type "id=search-term", "arms-test"
54
+ browser.click "name=commit"
55
+ wait{ browser.is_element_present("css=body.show-search-result-state") }
56
+ browser.check "name=new-whitelist-users"
57
+ browser.type "name=note", "test-adding"
58
+ browser.click "id=submit"
59
+ wait(15, "no pending state when adding user #{__FILE__} / #{__LINE__}") do
60
+ browser.is_element_present("css=tr.pending-state-true")
61
+ end
62
+ wait{ !browser.is_element_present("css=tr.pending-state-true") }
63
+ wait{ browser.is_element_present("css=#whitelisted-users-list tbody.user") }
64
+ end
65
+ end
66
+
67
+ def wait(timeout = 30, message = "")
68
+ assert !timeout.times{ break if (yield rescue false); sleep 1 },
69
+ message
70
+ end
@@ -0,0 +1,23 @@
1
+ QUnit.log = function(result_object, message) {
2
+ message = result_object.result ? "ok " : "FAILED ";
3
+ message += result_object.message;
4
+ if(!result_object.result){
5
+ message += "\n-----------------------8<-------------------------"
6
+ message += "\nexpected: " + result_object.expected
7
+ message += "\nbut got: " + result_object.actual
8
+ message += "\nsource: " + result_object.source
9
+ message += "\n----------------------->8-------------------------\n"
10
+ window.errors.push(message);
11
+ }
12
+ window.results.push(message);
13
+
14
+ if (window.console && window.console.log) {
15
+ window.console.log(message);
16
+ }
17
+ };
18
+ if(!window.results) {
19
+ window.results = [];
20
+ }
21
+ if(!window.errors) {
22
+ window.errors = [];
23
+ }
@@ -0,0 +1,112 @@
1
+ require 'fileutils'
2
+ require 'rake'
3
+
4
+ TEST_DIR="tests"
5
+
6
+ def ansi_colors(color)
7
+ case color
8
+ when :green then ["\033[32m", "\033[0m"]
9
+ when :red then ["\033[31m", "\033[0m"]
10
+ else ['','']
11
+ end
12
+ end
13
+
14
+ def cp_if_not_already_there(source, destination)
15
+ destination_expanded = File.join(Tuev.cwd, destination)
16
+ source_expanded = File.join(Tuev.gem_path, source)
17
+ print "%-60s" % destination
18
+
19
+ if File.exists?(destination_expanded)
20
+ prefix, suffix = ansi_colors(:red)
21
+ puts "#{prefix} ... already exists ... skipping#{suffix}"
22
+ else
23
+ FileUtils.cp(source_expanded, destination_expanded)
24
+ prefix, suffix = ansi_colors(:green)
25
+ puts "#{prefix} ... copied#{suffix}"
26
+ end
27
+ end
28
+
29
+ def mkdir_if_not_already_there(dir)
30
+ dir_expanded = File.join(Tuev.cwd, dir)
31
+ print "%-60s" % "#{dir}"
32
+
33
+ if File.exists?(dir_expanded)
34
+ prefix, suffix = ansi_colors(:red)
35
+ puts "#{prefix} ... directory already exists#{suffix}"
36
+ else
37
+ FileUtils.mkdir_p(dir_expanded)
38
+ prefix, suffix = ansi_colors(:green)
39
+ puts "#{prefix} ... directory created#{suffix}"
40
+ end
41
+ end
42
+
43
+ namespace :tuev do
44
+ desc "prepare this project for tuev tests (create sample files, download qunit & friends)"
45
+ task :prepare do
46
+ mkdir_if_not_already_there("config")
47
+ cp_if_not_already_there("contrib/tuev.yml", "config/tuev.yml")
48
+
49
+ mkdir_if_not_already_there("#{TEST_DIR}/tuev/test_files")
50
+ cp_if_not_already_there("contrib/tuev_helper.rb", "#{TEST_DIR}/tuev_helper.rb")
51
+
52
+ mkdir_if_not_already_there("#{TEST_DIR}/tuev/contrib")
53
+ cp_if_not_already_there("contrib/qunit/qunit/qunit.css",
54
+ File.join(Tuev.contrib_dir, "qunit.css"))
55
+ cp_if_not_already_there("contrib/qunit/qunit/qunit.js",
56
+ File.join(Tuev.contrib_dir, "qunit.js"))
57
+ cp_if_not_already_there("contrib/jquery-1.5.1.js",
58
+ File.join(Tuev.contrib_dir, "jquery-1.5.1.js"))
59
+ cp_if_not_already_there("contrib/mockjax/jquery.mockjax.js",
60
+ File.join(Tuev.contrib_dir, "jquery.mockjax.js"))
61
+ cp_if_not_already_there("contrib/test_default.html",
62
+ File.join(Tuev.contrib_dir, "test_default.html"))
63
+ cp_if_not_already_there("contrib/tuev_qunit.js",
64
+ File.join(Tuev.contrib_dir, "tuev_qunit.js"))
65
+ end
66
+
67
+ desc "run tests"
68
+ task :run do
69
+ failures = 0
70
+ Tuev.test_suites.each do |test_suite|
71
+ test_suite.create_test_files.each do |file|
72
+ failures += QunitRunner.new(file, Tuev.selenium_conf).run
73
+ end
74
+ end
75
+
76
+ puts
77
+
78
+ case failures
79
+ when 0
80
+ puts "woohoo: all tests pass -- you rock !!!"
81
+ when 1
82
+ puts "1 test failing -- this is very close to 0 failing actually!"
83
+ when 2..5
84
+ puts "mmm ... #{failures} failing tests! Can't you do better?"
85
+ when 6..15
86
+ puts "ufff ... get to work: #{failures} tests are still failing"
87
+ when 100..1_000_000
88
+ puts "I hope you don't get paid for this code! #{failures} errors!"
89
+ else
90
+ puts "#{failures} failing tests! You gotta be kidding me!"
91
+ end
92
+
93
+ puts
94
+
95
+ exit(failures)
96
+ end
97
+
98
+ desc "create static testfiles for qunit tests"
99
+ task :create_testfiles => :clean_testfiles do
100
+ files = []
101
+ Tuev.test_suites.each do |test_suite|
102
+ files << test_suite.create_test_files
103
+ end
104
+
105
+ puts "Created the following test files:\n\t#{files.join("\n\t")}"
106
+ end
107
+
108
+ desc "delete all statically created testfiles"
109
+ task :clean_testfiles do
110
+ FileUtils.rm_f(Dir.glob(File.join(Tuev.test_out, "*.html")))
111
+ end
112
+ end
data/lib/tuev/tuev.rb ADDED
@@ -0,0 +1,116 @@
1
+ require 'erb'
2
+
3
+ class Tuev
4
+ @contrib_dir = "tests/tuev/contrib"
5
+ class << self
6
+ attr_accessor :cwd, :gem_path, :config, :contrib_dir
7
+ end
8
+
9
+ def self.test_suites
10
+ config["test_suites"].inject([]) do |memo, test_suite_conf|
11
+ memo << TestSuite.new(test_suite_conf)
12
+ end
13
+ end
14
+
15
+ def self.test_out
16
+ File.expand_path(File.join(Tuev.cwd, "tests", "tuev", "test_files"))
17
+ end
18
+
19
+ def self.selenium_conf
20
+ @selenium_conf ||= {
21
+ :host => config["selenium"]["host"],
22
+ :port => config["selenium"]["port"],
23
+ :browsers => [*config["selenium"]["browsers"]]
24
+ }
25
+ end
26
+
27
+ class TestSuite
28
+ def initialize(test_suite_config)
29
+ begin
30
+ @test_file_template = File.join(Tuev.cwd, test_suite_config["test_file_template"])
31
+ rescue
32
+ raise "could not find 'test_file_template' setting for current suite"
33
+ end
34
+
35
+ @jquery_js = file_url(Tuev.contrib_dir, "jquery-1.5.1.js")
36
+ @mockjax_js = file_url(Tuev.contrib_dir, "jquery.mockjax.js")
37
+ @qunit_js = file_url(Tuev.contrib_dir, "qunit.js")
38
+ @tuev_qunit_js = file_url(Tuev.contrib_dir, "tuev_qunit.js")
39
+ @qunit_css = file_url(Tuev.contrib_dir, "qunit.css")
40
+ @test_suite_name = test_suite_config["name"]
41
+
42
+ @combine_tests = test_suite_config["combine_tests"]
43
+
44
+ @test_set = @tests = build_file_list(test_suite_config["test_files"])
45
+
46
+ @dependencies = build_file_list(test_suite_config["dependencies"])
47
+ end
48
+
49
+ def create_test_files
50
+ files = []
51
+ if @combine_tests
52
+ files << File.join(out_path, "#{@test_suite_name}.html")
53
+
54
+ @test_set_name = title_from_filename(files.last)
55
+ @test_set = @tests
56
+ save(render_template(@tests), files.last)
57
+ else
58
+ @tests.each do |test|
59
+ files << File.join(out_path, "#{@test_suite_name}_#{test.gsub('file://','').gsub(Tuev.cwd, '').tr('/.','_')}.html")
60
+
61
+ @test_set_name = title_from_filename(files.last)
62
+ @test_set = [test]
63
+ save(render_template(test), files.last)
64
+ end
65
+ end
66
+
67
+ files
68
+ end
69
+
70
+ private
71
+ def title_from_filename(filename)
72
+ filename.gsub(/#{out_path}[\/]*/, '').gsub('.html','').gsub('_js','').gsub('_',' ')
73
+ end
74
+
75
+ def out_path
76
+ Tuev.test_out
77
+ end
78
+
79
+ def save(source_code, filename)
80
+ File.open(filename, "w") do |f|
81
+ f << source_code
82
+ end
83
+ end
84
+
85
+ def render_template(tests)
86
+ template = ERB.new(File.read(@test_file_template))
87
+ template.result(binding)
88
+ end
89
+
90
+
91
+ def build_file_list(includes_and_excludes)
92
+ file_list = [*includes_and_excludes["include"]].map do |pattern|
93
+ files = Dir.glob(pattern)
94
+ if files.empty?
95
+ raise "could not find file matching '#{pattern}'"
96
+ end
97
+ files
98
+ end
99
+
100
+ file_list.flatten!
101
+
102
+ if excludes = includes_and_excludes["exclude"]
103
+ [*excludes].each do |exclude_regexp|
104
+ file_list.delete_if{|x| x =~ /#{exclude_regexp}/ }
105
+ end
106
+ end
107
+
108
+
109
+ file_list.map{|x| file_url(x)}
110
+ end
111
+
112
+ def file_url(*relativ_path_parts)
113
+ "file://#{File.expand_path(File.join(Tuev.cwd, *relativ_path_parts))}"
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,64 @@
1
+ require "selenium/client"
2
+ class QunitRunner
3
+ def initialize(path, selenium_conf)
4
+ @test_file = path
5
+ @selenium_conf = selenium_conf
6
+ end
7
+
8
+ def run_in_browser(browser_string)
9
+ begin
10
+ Net::HTTP.new(@selenium_conf[:host], @selenium_conf[:port]).get2("/")
11
+ rescue
12
+ puts
13
+ puts "It seems that there is no selenium server listening on '#{@selenium_conf[:host]}:#{@selenium_conf[:port]}'"
14
+ puts
15
+ puts "... aborting (try installing the gem 'selenium-server' and execute 'selenium-server' for an easy solution)"
16
+ puts
17
+ puts
18
+ exit(1)
19
+ end
20
+
21
+ selenium = Selenium::Client::Driver.new(
22
+ :host => @selenium_conf[:host],
23
+ :port => @selenium_conf[:port],
24
+ :browser => browser_string,
25
+ :url => "file://",
26
+ :timeout_in_second => 60
27
+ )
28
+
29
+ selenium.start_new_browser_session
30
+ yield(selenium)
31
+ selenium.close_current_browser_session
32
+
33
+ end
34
+
35
+ def run
36
+ num_of_errors = 0
37
+ errors = ""
38
+
39
+ @selenium_conf[:browsers].each do |browser_id|
40
+ run_in_browser(browser_id) do |browser|
41
+ browser.open "file://#{@test_file}"
42
+ browser.wait_for_page_to_load "60000"
43
+ puts "\n****** testing #{browser.get_text('css=title')} in #{browser_id}"
44
+ puts "file:\n\t#{@test_file}\n\n"
45
+ 60.times{ break if (browser.is_element_present("id=qunit-testresult") rescue false); sleep 1 }
46
+ sleep 1
47
+ puts browser.get_eval('window.results.join("\n")')
48
+ errors += browser.get_eval('window.errors.join("\n")')
49
+ 60.times{ break if (browser.get_text('id=qunit-testresult') != "Running..." rescue false); sleep 1 }
50
+ puts browser.get_text('id=qunit-testresult')
51
+ num_of_errors += browser.get_text("css=#qunit-testresult .failed").to_i
52
+ end
53
+ end
54
+
55
+ unless errors == ""
56
+ puts
57
+ puts "Finished with these errors:"
58
+ puts
59
+ puts errors
60
+ end
61
+
62
+ num_of_errors
63
+ end
64
+ end
data/lib/tuev.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'tuev/tuev.rb'
2
+ require 'tuev/tuev_runner.rb'
3
+ require 'yaml'
4
+
5
+ Tuev.gem_path = Gem.searcher.find('tuev').full_gem_path
6
+
7
+ if defined?(TESTING)
8
+ Tuev.cwd = File.join(Dir.pwd, "spec", "fixtures", "fake_root")
9
+ else
10
+ Tuev.cwd = Dir.pwd
11
+ Dir["#{Tuev.gem_path}/lib/tasks/*.rake"].each { |ext| load ext }
12
+ end
13
+
14
+ config_file = File.join(Tuev.cwd, "config/tuev.yml")
15
+ Tuev.config = YAML.load_file(config_file) if File.exists?(config_file)
@@ -0,0 +1,39 @@
1
+ # basic selenium stuff
2
+ selenium_stuff:
3
+ host: 'localhost' # host which runs selenium server
4
+ port: '4444' # selenium server port (if you get connection refused, try 5555)
5
+ browsers:
6
+ - '*firefox' # should work on most systems
7
+ #- *googlechrome # ... can't get it to work on mac os x or linux
8
+ #- *safari # well: mac os x only
9
+ default_timeout_in_seconds: 15 # requests that take longer fail
10
+
11
+ # define test suite here ... it's basically a Dir.glob-pattern for all test files
12
+ # and dependencies needed by test files
13
+ # qunit will be included automatically ... don't bother
14
+ # If JS-Files need to be loaded in a special order, list them individually ... all
15
+ # paths are relative to the directory from where the test is called (root of your
16
+ # project usually)
17
+ test_suites:
18
+ suite:
19
+ name: 'qunit_tests'
20
+ test_file_template: 'test/default_test.html' # it should be there ... check it out, adjust it to your needs
21
+ test_runner: 'test/qunit_tester.rb'
22
+ combine_tests: false # whether to create one big test file or one pre js-test-file
23
+ test_files:
24
+ include: 'spec/tuev/unit_tests/**/*.js' # Dir.glob-pattern
25
+ exclude: 'config\..*\.js' # regex of file names to be ignored
26
+ dependencies:
27
+ include: # include in a specified order
28
+ - 'client/public/javascripts/vendor/backbone-0.3.3.js'
29
+ - 'client/public/javascripts/vendor/backbone.js'
30
+ - 'client/public/javascripts/vendor/jquery.mockjax.js'
31
+ - 'client/public/javascripts/vendor/qunit.js'
32
+ - 'client/public/javascripts/vendor/underscore-1.1.4.js'
33
+ - 'client/public/javascripts/vendor/underscore.js'
34
+ - 'client/public/javascripts/vendor/models/*.js'
35
+ - 'client/public/javascripts/vendor/views/*.js'
36
+ - 'client/public/javascripts/vendor/controller/*.js'
37
+ suite:
38
+ name: 'selenium_tests'
39
+ test_url: 'http://soundcloud.com'
@@ -0,0 +1,13 @@
1
+ client/public/javascripts//tests
2
+ client/public/javascripts//tests/.test_helper.js.swp
3
+ client/public/javascripts//tests/fixtures
4
+ client/public/javascripts//tests/fixtures/user_mocks.js
5
+ client/public/javascripts//tests/fixtures/whitelist_list_mocks.js
6
+ client/public/javascripts//tests/models
7
+ client/public/javascripts//tests/models/user_list_tests.js
8
+ client/public/javascripts//tests/models/user_tests.js
9
+ client/public/javascripts//tests/models/whitelist_list_tests.js
10
+ client/public/javascripts//tests/test_helper.js
11
+ client/public/javascripts//tests/views
12
+ client/public/javascripts//tests/views/whitelist_list_tests.js
13
+ client/public/javascripts//tests/views/whitelist_user_tests.js
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'bacon'
11
+
12
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ TESTING=true
15
+ require 'tuev'
16
+
17
+ Bacon.summary_on_exit
data/spec/tuev_spec.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Tuev" do
4
+ it "fails" do
5
+ Tuev.new.should != nil
6
+ end
7
+ end