Better user specs for joining tables

This commit is contained in:
2013-12-09 10:01:06 +01:00
parent afb30556bd
commit 087cfa639d
15 changed files with 159 additions and 16 deletions
@@ -154,7 +154,8 @@ String.prototype.capitalize = function() {
function t(path, vars){ function t(path, vars){
vars || (vars = {}); vars || (vars = {});
var parts = path.split('.'); var parts = path.split('.');
var accessor = '$translations.'+$locale+'["' + parts.join('"]["')+ '"]'; var locale = Qstorage.getItem('locale') || 'en';
var accessor = '$translations.'+locale+'["' + parts.join('"]["')+ '"]';
var result; var result;
try{ try{
result = eval(accessor); result = eval(accessor);
@@ -175,7 +176,6 @@ $.ajaxSetup({
} }
}); });
$(function(){ $(function(){
$locale = Qstorage.getItem('locale') || 'en';
if(Qstorage.getItem('message')){ if(Qstorage.getItem('message')){
var container = $('.alert-success'); var container = $('.alert-success');
var msg_finder = Qstorage.getItem('message'); var msg_finder = Qstorage.getItem('message');
@@ -186,7 +186,7 @@ $(function(){
} }
if(Qstorage.getItem('list_closed')){ if(Qstorage.getItem('list_closed')){
var container = $('.alert-error'); var container = $('.alert-error');
container.find('div').text($translations[$locale]['messages']['the_list_has_been_closed']); container.find('div').text(t('messages.the_list_has_been_closed'));
container.show(); container.show();
Qstorage.removeItem('list_closed'); Qstorage.removeItem('list_closed');
} }
@@ -194,7 +194,6 @@ $(function(){
}); });
function setLocale(locale){ function setLocale(locale){
Qstorage.setItem('locale', locale); Qstorage.setItem('locale', locale);
$locale = locale;
setTranslations(); setTranslations();
} }
function Qupdate(selector){ function Qupdate(selector){
@@ -202,8 +201,9 @@ function Qupdate(selector){
} }
function setTranslations(selector){ function setTranslations(selector){
var list = $('#top-navigation-list'); var list = $('#top-navigation-list');
var locale = Qstorage.getItem('locale');
list.find('.locale').show(); list.find('.locale').show();
list.find('.locale-'+$locale).hide(); list.find('.locale-'+locale).hide();
if(selector){ if(selector){
$(selector).find('[data-t]').each(function(){$(this).text(t($(this).attr('data-t')))}) $(selector).find('[data-t]').each(function(){$(this).text(t($(this).attr('data-t')))})
}else{ }else{
+4 -1
View File
@@ -1,6 +1,7 @@
module Admin module Admin
class UsersController < Admin::ApplicationController class UsersController < Admin::ApplicationController
skip_before_filter :authenticate_administrator!, only: :test_login skip_before_filter :authenticate_administrator!, only: :test_login
skip_before_filter :set_locale, only: :test_login
# GET /users # GET /users
# GET /users.json # GET /users.json
def index def index
@@ -27,9 +28,11 @@ module Admin
def test_login def test_login
if Rails.env.test? and user = User.find_by_email(params[:email]) if Rails.env.test? and user = User.find_by_email(params[:email])
sign_in user sign_in user
end render layout: false
else
render nothing: true render nothing: true
end end
end
# GET /users/new # GET /users/new
# GET /users/new.json # GET /users/new.json
+1 -1
View File
@@ -24,7 +24,7 @@ private
end end
def set_locale def set_locale
I18n.locale = (params[:locale].presence || Rails.configuration.i18n.default_locale).to_sym I18n.locale = (params[:locale].presence || I18n.default_locale).to_sym
end end
def layout_by_resource def layout_by_resource
+2 -2
View File
@@ -7,7 +7,7 @@
<p>{{message}}</p> <p>{{message}}</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="#" class="btn" onclick="Quser.reject_join_request('{{requester_id}}')" data-dismiss="modal" aria-hidden="true">{{reject}}</a> <a href="#" class="btn reject-join-request-button" onclick="Quser.reject_join_request('{{requester_id}}')" data-dismiss="modal" aria-hidden="true">{{reject}}</a>
<a href="#" class="btn btn-primary" onclick="Quser.approve_join_request('{{requester_id}}')" data-dismiss="modal" aria-hidden="true">{{approve}}</a> <a href="#" class="btn btn-primary approve-join-request-button" onclick="Quser.approve_join_request('{{requester_id}}')" data-dismiss="modal" aria-hidden="true">{{approve}}</a>
</div> </div>
</div> </div>
@@ -0,0 +1,12 @@
doctype html
html
head
javascript:
localStorage.setItem('auth_token', '#{current_user.authentication_token}');
localStorage.setItem('user_id', '#{current_user.id}');
localStorage.setItem('locale', '#{I18n.default_locale}');
body
p Test login page
p= "Signed in as: #{current_user.email}"
-4
View File
@@ -21,7 +21,6 @@ html lang="en"
var QMobile, Qwaiter, Quser; var QMobile, Qwaiter, Quser;
var data_host = 'http://data.qwaiter.com'; var data_host = 'http://data.qwaiter.com';
var event_host = '#{event_host}'; var event_host = '#{event_host}';
var $locale = 'en';
var $asset_path = '##assets_path##'; var $asset_path = '##assets_path##';
var Qstorage = localStorage; var Qstorage = localStorage;
- else - else
@@ -29,7 +28,6 @@ html lang="en"
var QMobile, Qwaiter, Quser; var QMobile, Qwaiter, Quser;
var data_host = 'http://data.qwaiter.com'; var data_host = 'http://data.qwaiter.com';
var event_host = '#{event_host}'; var event_host = '#{event_host}';
var $locale = 'en';
var $asset_path = '/assets/'; var $asset_path = '/assets/';
var Qstorage = localStorage; var Qstorage = localStorage;
#{user_dynamic_data_host} #{user_dynamic_data_host}
@@ -48,8 +46,6 @@ html lang="en"
root_url: function(){return '/user'}, root_url: function(){return '/user'},
goHome: function(){ redirect_to('user_root')}, goHome: function(){ redirect_to('user_root')},
connection_problem: function(){alert('There is a problem connecting to the server')}, connection_problem: function(){alert('There is a problem connecting to the server')},
locale: function(){ return $locale || ($locale = 'en')},
setLocale: function(locale){$locale = locale; return locale},
token: function(){return this.auth_token}, token: function(){return this.auth_token},
setUserId: function(id){ this.stored_user_id = id}, setUserId: function(id){ this.stored_user_id = id},
user_id: function(){return this.stored_user_id }, user_id: function(){return this.stored_user_id },
+2 -2
View File
@@ -3,8 +3,8 @@
.form-actions .form-actions
= link_to t('user.join_occupied_table.back'), user_root_path, class: :btn, data: {t: 'join_request.requestor.go_back'} = link_to t('user.join_occupied_table.back'), user_root_path, class: :btn, data: {t: 'join_request.requestor.go_back'}
' '
button.btn.btn-primary onclick="Quser.show_table_products()" data-t='join_request.requestor.show_the_products'= t('user.join_occupied_table.show_the_products') button.btn.btn-primary.show-menu-button onclick="Quser.show_table_products()" data-t='join_request.requestor.show_the_products'= t('user.join_occupied_table.show_the_products')
' '
button.btn.btn-warning onClick="Quser.join_occupied_table()" data-t='join_request.requestor.join_this_table'= t('user.join_occupied_table.join_this_table') button.btn.btn-warning.join-table-button onClick="Quser.join_occupied_table()" data-t='join_request.requestor.join_this_table'= t('user.join_occupied_table.join_this_table')
#join-occupied-table-progress-container #join-occupied-table-progress-container
- onload_javascript 'Quser.watch_events()' - onload_javascript 'Quser.watch_events()'
@@ -0,0 +1,37 @@
Feature: Joining an occupied table
@javascript
Scenario: Happy flow
Given There is an open supplier with a menu
And there is a signed in user with an active order
And I am on the user homepage
When another user scans the QR code on the table
And the other user clicks the join table button
Then the other user should see a join table waiting message
And the original user should see a join request message
When the original user approves the other user's join request
Then the original user should not see the join request anymore
And the other user should be added to the active list
And the other user should be redirected to the user menu page
@javascript
Scenario: Original user rejects the join request
Given There is an open supplier with a menu
And there is a signed in user with an active order
And I am on the user homepage
When another user scans the QR code on the table
And the other user clicks the join table button
Then the other user should see a join table waiting message
And the original user should see a join request message
When the original user rejects the other user's join request
Then the original user should not see the join request anymore
And the other user should not be added to the active list
And the other user should see a join reject message
#@javascript
#Scenario: The other user just wants to see the table menu
#Given There is an open supplier with a menu
#And there is a signed in user with an active order
#And I am on the user homepage
#When another user scans the QR code on the table
#And the other user clicks the show me the menu button
@@ -7,6 +7,13 @@ step "the list is marked as in need of payment" do
@list.needs_payment! @list.needs_payment!
end end
step "the user has an active list" do
@list = create :list, supplier: @supplier, table: @table, user_ids: [@user.id]
@user.reload
@user.active_list_id = @list.id
@user.save
end
step "the list should be marked as closed" do step "the list should be marked as closed" do
@list.reload @list.reload
@list.state.should == 'closed' @list.state.should == 'closed'
@@ -22,3 +29,17 @@ end
step "I am signed in as a user" do step "I am signed in as a user" do
step "I visit the user obtain token path" step "I visit the user obtain token path"
end end
step "the other user should be added to the active list" do
@other_user.reload
@list.reload
@other_user.active_list_id.should == @list.id
@list.user_ids.should =~ [@user.id, @other_user.id]
end
step "the other user should not be added to the active list" do
@other_user.reload
@list.reload
@other_user.active_list_id.should be_nil
@list.user_ids.should == [@user.id]
end
@@ -3,7 +3,20 @@ step "the user scans a table QR code" do
page.execute_script "Quser.actions_for_table({table_id: '#{@table.id}'})" page.execute_script "Quser.actions_for_table({table_id: '#{@table.id}'})"
end end
step "another user scans the QR code on the table" do
step 'there is another signed in user user'
visit user_root_path
page.execute_script "Quser.actions_for_table({table_id: '#{@table.id}'})"
end
step 'there is a table' do step 'there is a table' do
step 'there is a section' step 'there is a section'
@table ||= create :table, section: @section, supplier: @supplier @table ||= create :table, section: @section, supplier: @supplier
end end
step "the other user should see a join table waiting message" do
#waiting_text = I18n.t('') #TODO: make better user client translation system, similar to supplier
waiting_text = page.evaluate_script(%|t('join_request.requestor.waiting_for_confirmation')|)
page.should have_content waiting_text
end
@@ -10,3 +10,16 @@ step "the user should be redirected to the archived list path" do
route_should_be 'user#history_list' route_should_be 'user#history_list'
page.should have_selector ".order-row-#{@order.id}" page.should have_selector ".order-row-#{@order.id}"
end end
step 'there is another user' do
@other_user ||= create :user
end
step "the other user clicks the join table button" do
find('.join-table-button').click
end
step "the other user should be redirected to the user menu page" do
Capybara.session_name = :other_user
route_should_be 'user#list_products'
end
@@ -23,6 +23,12 @@ step "I should be signed in as a user through facebook" do
step "the newly created user info should be stored in the local storage" step "the newly created user info should be stored in the local storage"
end end
step 'there is another signed in user user' do
Capybara.session_name = :other_user
step 'there is another user'
visit test_login_admin_users_path(email: @other_user.email)
end
step "I should be redirected to the user home" do step "I should be redirected to the user home" do
page.current_path.should == user_root_path page.current_path.should == user_root_path
end end
@@ -0,0 +1,29 @@
step "the original user should see a join request message" do
Capybara.session_name = :default
request_text = page.evaluate_script(%|t('join_request.body', {email: '#{@other_user.email}'})|)
request_text.should be_present
page.should have_content request_text
end
step "the original user should not see the join request anymore" do
Capybara.session_name = :default
request_text = page.evaluate_script(%|t('join_request.body', {email: '#{@other_user.email}'})|)
request_text.should be_present
page.should_not have_content request_text
end
step "the original user approves the other user's join request" do
find('.approve-join-request-button').click
end
step "the original user rejects the other user's join request" do
find('.reject-join-request-button').click
end
step "the other user should see a join reject message" do
Capybara.session_name = :other_user
reject_text = I18n.t('messages.join_request_rejected')
reject_text.should be_present
reject_text.should_not include 'translation'
page.should have_content reject_text
end
@@ -15,3 +15,15 @@ step "the user clicks on the user order button" do
find('#active-order-table .btn-primary').click find('#active-order-table .btn-primary').click
sleep 1 sleep 1
end end
step "the user has an active order" do
step 'there is a section'
step 'there is a table'
step 'the user has an active list'
end
step "there is a signed in user with an active order" do
step "I am signed in as a user"
step "the user has an active order"
end
+2 -1
View File
@@ -12,7 +12,7 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
#Dir[Rails.root.join("spec/factories/**/*.rb")].each {|f| require f } #Dir[Rails.root.join("spec/factories/**/*.rb")].each {|f| require f }
Dir.glob("spec/acceptance_steps/**/*steps.rb") { |f| load f, true } Dir.glob("spec/acceptance_steps/**/*steps.rb") { |f| load f, true }
I18n.locale = Rails.configuration.i18n.default_locale I18n.locale =I18n.default_locale
Devise.stretches = 1 Devise.stretches = 1
Capybara.javascript_driver = :webkit Capybara.javascript_driver = :webkit
#Capybara.default_driver = :selenium #Capybara.default_driver = :selenium
@@ -113,6 +113,7 @@ RSpec.configure do |config|
config.before :each, type: :feature do config.before :each, type: :feature do
#Supplier.any_instance.stub send_confirmation_instructions: true #Supplier.any_instance.stub send_confirmation_instructions: true
Capybara.session_name = :default
end end
# If true, the base class of anonymous controllers will be inferred # If true, the base class of anonymous controllers will be inferred