Boli pridane potrebne gemy pre testovanie. Chybove hlasky su ulozene v prekladovom subore.
... | ... |
@@ -5,4 +5,4 @@ You are allowed to: |
5 | 5 |
2. Remove generators |
6 | 6 |
3. Add installed generators |
7 | 7 |
To add new installed generators automatically delete this file and reload the project. |
8 |
+--><GeneratorsGroup><Generator name="active_record:migration" /><Generator name="active_record:model" /><Generator name="active_record:observer" /><Generator name="active_record:session_migration" /><Generator name="assets" /><Generator name="coffee:assets" /><Generator name="controller" /><Generator name="erb:controller" /><Generator name="erb:mailer" /><Generator name="erb:scaffold" /><Generator name="generator" /><Generator name="helper" /><Generator name="integration_test" /><Generator name="jquery:install" /><Generator name="js:assets" /><Generator name="mailer" /><Generator name="migration" /><Generator name="model" /><Generator name="mongoid:config" /><Generator name="observer" /><Generator name="performance_test" /><Generator name="resource" /><Generator name="rspec:controller" /><Generator name="rspec:helper" /><Generator name="rspec:install" /><Generator name="rspec:integration" /><Generator name="rspec:mailer" /><Generator name="rspec:model" /><Generator name="rspec:observer" /><Generator name="rspec:scaffold" /><Generator name="rspec:view" /><Generator name="scaffold" /><Generator name="scaffold_controller" /><Generator name="session_migration" /><Generator name="task" /></GeneratorsGroup></Settings> |
... | ... |
@@ -28,6 +28,7 @@ GEM |
28 | 28 |
activesupport (3.2.11) |
29 | 29 |
i18n (~> 0.6) |
30 | 30 |
multi_json (~> 1.0) |
31 |
+ addressable (2.3.2) |
|
31 | 32 |
ansi (1.4.3) |
32 | 33 |
arel (3.0.2) |
33 | 34 |
builder (3.0.4) |
... | ... |
@@ -37,6 +38,15 @@ GEM |
37 | 37 |
net-sftp (>= 2.0.0) |
38 | 38 |
net-ssh (>= 2.0.14) |
39 | 39 |
net-ssh-gateway (>= 1.1.0) |
40 |
+ capybara (2.0.2) |
|
41 |
+ mime-types (>= 1.16) |
|
42 |
+ nokogiri (>= 1.3.3) |
|
43 |
+ rack (>= 1.0.0) |
|
44 |
+ rack-test (>= 0.5.4) |
|
45 |
+ selenium-webdriver (~> 2.0) |
|
46 |
+ xpath (~> 1.0.0) |
|
47 |
+ childprocess (0.3.7) |
|
48 |
+ ffi (~> 1.0, >= 1.0.6) |
|
40 | 49 |
chunky_png (1.2.7) |
41 | 50 |
coffee-rails (3.2.2) |
42 | 51 |
coffee-script (>= 2.2.0) |
... | ... |
@@ -49,9 +59,16 @@ GEM |
49 | 49 |
chunky_png (~> 1.2) |
50 | 50 |
fssm (>= 0.2.7) |
51 | 51 |
sass (~> 3.1) |
52 |
+ diff-lcs (1.1.3) |
|
52 | 53 |
erubis (2.7.0) |
53 | 54 |
execjs (1.4.0) |
54 | 55 |
multi_json (~> 1.0) |
56 |
+ factory_girl (4.2.0) |
|
57 |
+ activesupport (>= 3.0.0) |
|
58 |
+ factory_girl_rails (4.2.0) |
|
59 |
+ factory_girl (~> 4.2.0) |
|
60 |
+ railties (>= 3.0.0) |
|
61 |
+ ffi (1.3.1) |
|
55 | 62 |
fssm (0.2.10) |
56 | 63 |
haml (3.1.7) |
57 | 64 |
haml-rails (0.3.5) |
... | ... |
@@ -68,6 +85,8 @@ GEM |
68 | 68 |
railties (>= 3.0, < 5.0) |
69 | 69 |
thor (>= 0.14, < 2.0) |
70 | 70 |
json (1.7.6) |
71 |
+ launchy (2.2.0) |
|
72 |
+ addressable (~> 2.3) |
|
71 | 73 |
mail (2.4.4) |
72 | 74 |
i18n (>= 0.4.0) |
73 | 75 |
mime-types (~> 1.16) |
... | ... |
@@ -93,6 +112,7 @@ GEM |
93 | 93 |
net-ssh (2.6.3) |
94 | 94 |
net-ssh-gateway (1.1.0) |
95 | 95 |
net-ssh (>= 1.99.1) |
96 |
+ nokogiri (1.5.6) |
|
96 | 97 |
origin (1.0.11) |
97 | 98 |
polyglot (0.3.3) |
98 | 99 |
powerbar (1.0.11) |
... | ... |
@@ -123,11 +143,28 @@ GEM |
123 | 123 |
rake (10.0.3) |
124 | 124 |
rdoc (3.12) |
125 | 125 |
json (~> 1.4) |
126 |
+ rspec-core (2.12.2) |
|
127 |
+ rspec-expectations (2.12.1) |
|
128 |
+ diff-lcs (~> 1.1.3) |
|
129 |
+ rspec-mocks (2.12.2) |
|
130 |
+ rspec-rails (2.12.2) |
|
131 |
+ actionpack (>= 3.0) |
|
132 |
+ activesupport (>= 3.0) |
|
133 |
+ railties (>= 3.0) |
|
134 |
+ rspec-core (~> 2.12.0) |
|
135 |
+ rspec-expectations (~> 2.12.0) |
|
136 |
+ rspec-mocks (~> 2.12.0) |
|
137 |
+ rubyzip (0.9.9) |
|
126 | 138 |
sass (3.2.5) |
127 | 139 |
sass-rails (3.2.6) |
128 | 140 |
railties (~> 3.2.0) |
129 | 141 |
sass (>= 3.1.10) |
130 | 142 |
tilt (~> 1.3) |
143 |
+ selenium-webdriver (2.29.0) |
|
144 |
+ childprocess (>= 0.2.5) |
|
145 |
+ multi_json (~> 1.0) |
|
146 |
+ rubyzip |
|
147 |
+ websocket (~> 1.0.4) |
|
131 | 148 |
sprockets (2.2.2) |
132 | 149 |
hike (~> 1.2) |
133 | 150 |
multi_json (~> 1.0) |
... | ... |
@@ -144,22 +181,29 @@ GEM |
144 | 144 |
uglifier (1.3.0) |
145 | 145 |
execjs (>= 0.3.0) |
146 | 146 |
multi_json (~> 1.0, >= 1.0.2) |
147 |
+ websocket (1.0.7) |
|
147 | 148 |
xmpp4r (0.5) |
149 |
+ xpath (1.0.0) |
|
150 |
+ nokogiri (~> 1.3) |
|
148 | 151 |
|
149 | 152 |
PLATFORMS |
150 | 153 |
ruby |
151 | 154 |
|
152 | 155 |
DEPENDENCIES |
153 | 156 |
capistrano |
157 |
+ capybara |
|
154 | 158 |
coffee-rails (~> 3.2.1) |
155 | 159 |
compass (~> 0.12.2) |
160 |
+ factory_girl_rails |
|
156 | 161 |
haml (~> 3.1.7) |
157 | 162 |
haml-rails (~> 0.3.5) |
158 | 163 |
jquery-rails |
164 |
+ launchy |
|
159 | 165 |
minitest |
160 | 166 |
minitest-reporters (>= 0.5.0) |
161 | 167 |
mongoid (~> 3.0.20) |
162 | 168 |
rails (= 3.2.11) |
169 |
+ rspec-rails |
|
163 | 170 |
sass-rails (~> 3.2.3) |
164 | 171 |
test-unit |
165 | 172 |
timecop |
... | ... |
@@ -4,7 +4,17 @@ class SessionsController < ApplicationController |
4 | 4 |
end |
5 | 5 |
|
6 | 6 |
def create |
7 |
+ require_dependency "signin.rb" |
|
7 | 8 |
|
9 |
+ begin |
|
10 |
+ Signin.try_login(params[:jid].downcase, params[:password]) |
|
11 |
+ rescue Signin::LoginError |
|
12 |
+ flash.now[:error] = I18n.t 'login.error' |
|
13 |
+ return render 'new' |
|
14 |
+ end |
|
15 |
+ |
|
16 |
+ flash.now[:notice] = I18n.t 'login.success' |
|
17 |
+ render 'new' |
|
8 | 18 |
end |
9 | 19 |
|
10 | 20 |
def destroy |
11 | 21 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,29 @@ |
0 |
+require 'json/pure' |
|
1 |
+require 'xmpp4r' |
|
2 |
+require 'xmpp4r/roster' |
|
3 |
+require 'cgi' |
|
4 |
+ |
|
5 |
+module Signin |
|
6 |
+ include Jabber |
|
7 |
+ |
|
8 |
+ def self.try_login(jid, pass) |
|
9 |
+ @client = Client.new(jid) |
|
10 |
+ |
|
11 |
+ Jabber::debug = (Rails.env == 'development') |
|
12 |
+ |
|
13 |
+ begin |
|
14 |
+ connect(pass) |
|
15 |
+ rescue |
|
16 |
+ raise LoginError |
|
17 |
+ end |
|
18 |
+ end |
|
19 |
+ |
|
20 |
+ def self.connect(pass) |
|
21 |
+ @client.connect() |
|
22 |
+ @client.auth(pass) |
|
23 |
+ end |
|
24 |
+ |
|
25 |
+ class LoginError < Exception |
|
26 |
+ |
|
27 |
+ end |
|
28 |
+end |
|
0 | 29 |
\ No newline at end of file |
... | ... |
@@ -1,3 +1,20 @@ |
1 | 1 |
- content_for(:title, 'Login') |
2 |
+%h1 Login |
|
3 |
+- if flash[:error] |
|
4 |
+ %div.alert.alert-error |
|
5 |
+ = flash[:error] |
|
2 | 6 |
|
3 |
-Hello |
|
4 | 7 |
\ No newline at end of file |
8 |
+- if flash[:notice] |
|
9 |
+ %div.alert.alert-notice |
|
10 |
+ = flash[:notice] |
|
11 |
+ |
|
12 |
+%form{ action: sessions_path, method: "post"} |
|
13 |
+ %fieldset |
|
14 |
+ %ol |
|
15 |
+ %li |
|
16 |
+ %label{for: "jid"} Jabber ID: |
|
17 |
+ %input{type: "text", name: "jid", class: "text", id: "jid"} |
|
18 |
+ %li |
|
19 |
+ %label{for: "password"} Password: |
|
20 |
+ %input{type: "password", name: "password", class: "text", id: "password"} |
|
21 |
+ %input{type: "submit", value: "Send", class: "button"} |
|
5 | 22 |
\ No newline at end of file |
1 | 7 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,39 @@ |
0 |
+require 'spec_helper' |
|
1 |
+ |
|
2 |
+describe "Authentication" do |
|
3 |
+ |
|
4 |
+ subject { page } |
|
5 |
+ |
|
6 |
+ describe "signin page" do |
|
7 |
+ before { visit signin_path } |
|
8 |
+ |
|
9 |
+ it { should have_selector('h1', text: 'Login') } |
|
10 |
+ it { should have_title('Login') } |
|
11 |
+ end |
|
12 |
+ |
|
13 |
+ describe "signin" do |
|
14 |
+ before { visit signin_path } |
|
15 |
+ |
|
16 |
+ describe "with invalid information" do |
|
17 |
+ before { click_button "Send" } |
|
18 |
+ |
|
19 |
+ it { should have_title('Login') } |
|
20 |
+ it { should have_selector('div.alert.alert-error', text: 'Invalid') } |
|
21 |
+ end |
|
22 |
+ |
|
23 |
+ describe "with valid information" do |
|
24 |
+ before do |
|
25 |
+ fill_in "jid", with: 'bakalar@jabbim.cz' |
|
26 |
+ fill_in "password", with: 'tralala' |
|
27 |
+ click_button "Send" |
|
28 |
+ end |
|
29 |
+ |
|
30 |
+ #it { should have_title(user.name) } |
|
31 |
+ #it { should have_link('Profile', href: user_path(user)) } |
|
32 |
+ #it { should have_link('Logout', href: signout_path) } |
|
33 |
+ #it { should_not have_link('Login', href: signin_path) } |
|
34 |
+ |
|
35 |
+ it {should have_selector('div.alert.alert-notice', text: 'Success')} |
|
36 |
+ end |
|
37 |
+ end |
|
38 |
+end |
|
0 | 39 |
\ No newline at end of file |
1 | 40 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,44 @@ |
0 |
+# This file is copied to spec/ when you run 'rails generate rspec:install' |
|
1 |
+ENV["RAILS_ENV"] ||= 'test' |
|
2 |
+require File.expand_path("../../config/environment", __FILE__) |
|
3 |
+require 'rspec/rails' |
|
4 |
+require 'rspec/autorun' |
|
5 |
+ |
|
6 |
+RSpec::Matchers::define :have_title do |text| |
|
7 |
+ match do |page| |
|
8 |
+ Capybara.string(page.body).has_selector?('title', text: text) |
|
9 |
+ end |
|
10 |
+end |
|
11 |
+ |
|
12 |
+# Requires supporting ruby files with custom matchers and macros, etc, |
|
13 |
+# in spec/support/ and its subdirectories. |
|
14 |
+Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} |
|
15 |
+ |
|
16 |
+RSpec.configure do |config| |
|
17 |
+ # ## Mock Framework |
|
18 |
+ # |
|
19 |
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: |
|
20 |
+ # |
|
21 |
+ # config.mock_with :mocha |
|
22 |
+ # config.mock_with :flexmock |
|
23 |
+ # config.mock_with :rr |
|
24 |
+ |
|
25 |
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures |
|
26 |
+ #config.fixture_path = "#{::Rails.root}/spec/fixtures" |
|
27 |
+ |
|
28 |
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your |
|
29 |
+ # examples within a transaction, remove the following line or assign false |
|
30 |
+ # instead of true. |
|
31 |
+ #config.use_transactional_fixtures = true |
|
32 |
+ |
|
33 |
+ # If true, the base class of anonymous controllers will be inferred |
|
34 |
+ # automatically. This will be the default behavior in future versions of |
|
35 |
+ # rspec-rails. |
|
36 |
+ config.infer_base_class_for_anonymous_controllers = false |
|
37 |
+ |
|
38 |
+ # Run specs in random order to surface order dependencies. If you find an |
|
39 |
+ # order dependency and want to debug it, you can fix the order by providing |
|
40 |
+ # the seed, which is printed after each run. |
|
41 |
+ # --seed 1234 |
|
42 |
+ config.order = "random" |
|
43 |
+end |