From 80a48c60c62d16166205650acdd509636f4e8e18 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 31 Mar 2015 21:08:09 -0500 Subject: [PATCH] * VRFS-2879 - adding 3 product pages (jamblaster, platform, jamtracks) --- web/app/assets/javascripts/session.js | 6 + .../javascripts/web/individual_jamtrack.js | 62 +++++++++ .../web/individual_jamtrack_band.js | 60 +++++++++ web/app/assets/javascripts/web/web.js | 2 + .../stylesheets/client/jamkazam.css.scss | 2 +- .../landings/landing_page_new.css.scss | 15 ++- .../landings/landing_product.css.scss | 53 ++++++++ web/app/controllers/landings_controller.rb | 20 +++ .../landings/individual_jamtrack.html.slim | 69 +--------- .../individual_jamtrack_band.html.slim | 70 +--------- .../landings/product_jamblaster.html.slim | 37 ++++++ .../landings/product_jamtracks.html.slim | 42 ++++++ .../views/landings/product_platform.html.slim | 40 ++++++ web/config/application.rb | 2 + web/config/routes.rb | 5 + .../features/individual_jamtrack_band_spec.rb | 9 +- web/spec/features/individual_jamtrack_spec.rb | 12 +- web/spec/features/products_spec.rb | 122 ++++++++++++++++++ 18 files changed, 489 insertions(+), 139 deletions(-) create mode 100644 web/app/assets/javascripts/web/individual_jamtrack.js create mode 100644 web/app/assets/javascripts/web/individual_jamtrack_band.js create mode 100644 web/app/assets/stylesheets/landings/landing_product.css.scss create mode 100644 web/app/views/landings/product_jamblaster.html.slim create mode 100644 web/app/views/landings/product_jamtracks.html.slim create mode 100644 web/app/views/landings/product_platform.html.slim create mode 100644 web/spec/features/products_spec.rb diff --git a/web/app/assets/javascripts/session.js b/web/app/assets/javascripts/session.js index db44a05fa..d3669b68d 100644 --- a/web/app/assets/javascripts/session.js +++ b/web/app/assets/javascripts/session.js @@ -2740,6 +2740,12 @@ logger.debug("Unstable clocks: ", names, unstable) context.JK.Banner.showAlert("Couldn't open metronome", context._.template($('#template-help-metronome-unstable').html(), {names: names}, { variable: 'data' })); } else { + var data = { + value: 1, + session_size: sessionModel.participants().length, + user_id: context.JK.currentUserId, + user_name: context.JK.currentUserName } + context.stats.write('web.metronome.open', {}) var bpm = 120; logger.debug("opening the metronome with bpm: " + bpm + ", sound:" + metroSound) rest.openMetronome({id: sessionModel.id()}) diff --git a/web/app/assets/javascripts/web/individual_jamtrack.js b/web/app/assets/javascripts/web/individual_jamtrack.js new file mode 100644 index 000000000..bbfd05896 --- /dev/null +++ b/web/app/assets/javascripts/web/individual_jamtrack.js @@ -0,0 +1,62 @@ +(function (context, $) { + + "use strict"; + + context.JK = context.JK || {}; + context.JK.IndividualJamTrack = function (app) { + + var rest = context.JK.Rest(); + var logger = context.JK.logger; + var $page = null; + var $jamtrack_name = null; + var $previews = null; + var $jamTracksButton = null; + var $genericHeader = null; + var $individualizedHeader = null; + + function fetchJamTrack() { + rest.getJamTrack({plan_code: gon.jam_track_plan_code}) + .done(function (jam_track) { + logger.debug("jam_track", jam_track) + + if(!gon.just_previews) { + if (gon.generic) { + $genericHeader.removeClass('hidden'); + } + else { + $individualizedHeader.removeClass('hidden') + $jamtrack_name.text(jam_track.name); + $jamTracksButton.attr('href', '/client?artist=' + jam_track.original_artist + '#/jamtrack') + } + } + + context._.each(jam_track.tracks, function (track) { + + var $element = $('
') + + $previews.append($element); + + new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false}) + }) + + $previews.append('
') + }) + .fail(function () { + app.notify({title: 'Unable to fetch JamTrack', text: "Please refresh the page or try again later."}) + }) + + } + function initialize() { + + $page = $('body') + $jamtrack_name = $page.find('.jamtrack_name') + $previews = $page.find('.previews') + $jamTracksButton = $page.find('.browse-jamtracks-wrapper .white-bordered-button') + $genericHeader = $page.find('h1.generic') + $individualizedHeader = $page.find('h1.individualized') + fetchJamTrack(); + } + + this.initialize = initialize; + } +})(window, jQuery); \ No newline at end of file diff --git a/web/app/assets/javascripts/web/individual_jamtrack_band.js b/web/app/assets/javascripts/web/individual_jamtrack_band.js new file mode 100644 index 000000000..0de60a2e7 --- /dev/null +++ b/web/app/assets/javascripts/web/individual_jamtrack_band.js @@ -0,0 +1,60 @@ + +(function (context, $) { + + "use strict"; + + context.JK = context.JK || {}; + context.JK.IndividualJamTrackBand = function (app) { + + var rest = context.JK.Rest(); + var logger = context.JK.logger; + var $page = null; + var $jamTrackBandInfo = null; + var $jamTrackNoun = null; + var $previews = null; + var $jamTracksButton = null; + var $checkItOut = null; + + function fetchJamTrack() { + rest.getJamTrackWithArtistInfo({plan_code: gon.jam_track_plan_code}) + .done(function (jam_track) { + logger.debug("jam_track", jam_track) + + $jamTrackBandInfo.text(jam_track.band_jam_track_count + ' ' + jam_track.original_artist); + $jamTracksButton.attr('href', '/client?artist=' + jam_track.original_artist + '#/jamtrack') + + if(jam_track.band_jam_track_count == 1) { + $jamTrackNoun.text('JamTrack') + $checkItOut.text(', Check It Out!') + } + context._.each(jam_track.tracks, function (track) { + + var $element = $('
') + + $previews.append($element); + + new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false}) + }) + + $previews.append('
') + }) + .fail(function () { + app.notify({title: 'Unable to fetch JamTrack', text: "Please refresh the page or try again later."}) + }) + + } + function initialize() { + + $page = $('body') + $jamTrackBandInfo = $page.find('.jamtrack_band_info') + $previews = $page.find('.previews') + $jamTracksButton = $page.find('.browse-jamtracks-wrapper .white-bordered-button') + $jamTrackNoun = $page.find('.jamtrack_noun') + $checkItOut = $page.find('.check-it-out') + + fetchJamTrack(); + } + + this.initialize = initialize; + } +})(window, jQuery); diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js index eca70f736..a36ad12e2 100644 --- a/web/app/assets/javascripts/web/web.js +++ b/web/app/assets/javascripts/web/web.js @@ -62,6 +62,8 @@ //= require web/session_info //= require web/recordings //= require web/welcome +//= require web/individual_jamtrack +//= require web/individual_jamtrack_band //= require fakeJamClient //= require fakeJamClientMessages //= require fakeJamClientRecordings diff --git a/web/app/assets/stylesheets/client/jamkazam.css.scss b/web/app/assets/stylesheets/client/jamkazam.css.scss index d1e2b4192..b898d2958 100644 --- a/web/app/assets/stylesheets/client/jamkazam.css.scss +++ b/web/app/assets/stylesheets/client/jamkazam.css.scss @@ -134,7 +134,7 @@ input[type="button"] { } .hidden { - display:none; + display:none !important; } .small { diff --git a/web/app/assets/stylesheets/landings/landing_page_new.css.scss b/web/app/assets/stylesheets/landings/landing_page_new.css.scss index d8938ec15..2fd40ea5f 100644 --- a/web/app/assets/stylesheets/landings/landing_page_new.css.scss +++ b/web/app/assets/stylesheets/landings/landing_page_new.css.scss @@ -5,11 +5,17 @@ body.web.landing_page { .two_by_two { h1 { - margin:0 0 10px; + margin:0 0 5px; + padding:7px 0; + display:inline-block; } .row { @include border_box_sizing; + &:nth-of-type(1) { + padding:20px 0 0 0; + } + .column { width:50%; @@ -19,7 +25,7 @@ body.web.landing_page { } } - &.landing_jamtrack { + &.landing_jamtrack, &.landing_product { .landing-tag { left:50%; @@ -34,7 +40,10 @@ body.web.landing_page { } ul { - + list-style-type: disc; + } + li { + margin-left:20px; } .video-container { margin-top:0; diff --git a/web/app/assets/stylesheets/landings/landing_product.css.scss b/web/app/assets/stylesheets/landings/landing_product.css.scss new file mode 100644 index 000000000..99739aa57 --- /dev/null +++ b/web/app/assets/stylesheets/landings/landing_product.css.scss @@ -0,0 +1,53 @@ +@import "client/common.css.scss"; + +body.web.landing_product { + + h1.product-headline { + color:white; + background-color:$ColorScreenPrimary; + margin-bottom:20px; + padding:7px; + border-radius:4px; + } + + .product-description { + margin-bottom:20px; + } + + .white-bordered-button { + margin-top: 20px; + } + + .cta-big-button { + text-align:center; + width:90%; + } + + .linked-video-holder { + text-align:center; + width:90%; + margin-top:20px; + } + + .previews { + margin-top:10px; + } + + .jamtrack-reasons { + margin-top:20px; + } + + .jam-track-preview-holder { + + margin-bottom: 7px; + float: left; + + &[data-track-type="Master"] { + width: 100%; + } + + &[data-track-type="Track"] { + width: 50%; + } + } +} \ No newline at end of file diff --git a/web/app/controllers/landings_controller.rb b/web/app/controllers/landings_controller.rb index 59714c31c..e2df670cc 100644 --- a/web/app/controllers/landings_controller.rb +++ b/web/app/controllers/landings_controller.rb @@ -77,5 +77,25 @@ class LandingsController < ApplicationController render 'individual_jamtrack_band', layout: 'web' end + + def product_jamblaster + render 'product_jamblaster', layout: 'web' + end + + def product_platform + render 'product_platform', layout: 'web' + end + + def product_jamtracks + gon.generic = true + gon.just_previews = true + jam_track = JamTrack.select('plan_code').where(plan_code: Rails.application.config.nominated_jam_track).first + unless jam_track + jam_track = JamTrack.first + end + + gon.jam_track_plan_code = jam_track.plan_code + render 'product_jamtracks', layout: 'web' + end end diff --git a/web/app/views/landings/individual_jamtrack.html.slim b/web/app/views/landings/individual_jamtrack.html.slim index bcfdb1abb..ad52b67f3 100644 --- a/web/app/views/landings/individual_jamtrack.html.slim +++ b/web/app/views/landings/individual_jamtrack.html.slim @@ -31,75 +31,16 @@ | Unlike traditional backing tracks, JamTracks are complete multitrack recordings,  | with fully isolated tracks for each part. Used with the free JamKazam app/service, you can: ul.jamtrack-reasons - li - Solo just the individual track you want to play to hear and learn it - li - Mute just the track you want to play, and play along with the rest - li - Make audio recordings and share them via Facebook or URL - li - Make video recordings and share them via YouTube or URL - li - And even go online to play JamTracks with others in real time! + li Solo just the individual track you want to play to hear and learn it + li Mute just the track you want to play, and play along with the rest + li Make audio recordings and share them via Facebook or URL + li Make video recordings and share them via YouTube or URL + li And even go online to play JamTracks with others in real time! br clear="all" br clear="all" javascript: - (function (context, $) { - "use strict"; - - context.JK = context.JK || {}; - context.JK.IndividualJamTrack = function (app) { - - var rest = context.JK.Rest(); - var logger = context.JK.logger; - var $page = null; - var $jamtrack_name = null; - var $previews = null; - var $jamTracksButton = null; - var $genericHeader = null; - var $individualizedHeader = null; - - function fetchJamTrack() { - rest.getJamTrack({plan_code: gon.jam_track_plan_code}) - .done(function (jam_track) { - logger.debug("jam_track", jam_track) - - if(gon.generic) { - $genericHeader.removeClass('hidden'); - } - else { - $individualizedHeader.removeClass('hidden') - $jamtrack_name.text(jam_track.name); - $jamTracksButton.attr('href', '/client?artist=' + jam_track.original_artist + '#/jamtrack') - } - - context._.each(jam_track.tracks, function (track) { - - var $element = $('
') - - $previews.append($element); - - new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false}) - }) - - $previews.append('
') - }) - .fail(function () { - app.notify({title: 'Unable to fetch JamTrack', text: "Please refresh the page or try again later."}) - }) - - } - function initialize() { - - $page = $('body') - $jamtrack_name = $page.find('.jamtrack_name') - $previews = $page.find('.previews') - $jamTracksButton = $page.find('.browse-jamtracks-wrapper .white-bordered-button') - $genericHeader = $page.find('h1.generic') - $individualizedHeader = $page.find('h1.individualized') - fetchJamTrack(); - } - - this.initialize = initialize; - } - })(window, jQuery); $(document).on('JAMKAZAM_READY', function(e, data) { var song = new JK.IndividualJamTrack(data.app); diff --git a/web/app/views/landings/individual_jamtrack_band.html.slim b/web/app/views/landings/individual_jamtrack_band.html.slim index 986e5c21a..dad0f43c3 100644 --- a/web/app/views/landings/individual_jamtrack_band.html.slim +++ b/web/app/views/landings/individual_jamtrack_band.html.slim @@ -31,75 +31,15 @@ | Unlike traditional backing tracks, JamTracks are complete multitrack recordings,  | with fully isolated tracks for each part. Used with the free JamKazam app/service, you can: ul.jamtrack-reasons - li - Solo just the individual track you want to play to hear and learn it - li - Mute just the track you want to play, and play along with the rest - li - Make audio recordings and share them via Facebook or URL - li - Make video recordings and share them via YouTube or URL - li - And even go online to play JamTracks with others in real time! + li Solo just the individual track you want to play to hear and learn it + li Mute just the track you want to play, and play along with the rest + li Make audio recordings and share them via Facebook or URL + li Make video recordings and share them via YouTube or URL + li And even go online to play JamTracks with others in real time! br clear="all" br clear="all" javascript: - (function (context, $) { - - "use strict"; - - context.JK = context.JK || {}; - context.JK.IndividualJamTrackBand = function (app) { - - var rest = context.JK.Rest(); - var logger = context.JK.logger; - var $page = null; - var $jamTrackBandInfo = null; - var $jamTrackNoun = null; - var $previews = null; - var $jamTracksButton = null; - var $checkItOut = null; - - function fetchJamTrack() { - rest.getJamTrackWithArtistInfo({plan_code: gon.jam_track_plan_code}) - .done(function (jam_track) { - logger.debug("jam_track", jam_track) - - $jamTrackBandInfo.text(jam_track.band_jam_track_count + ' ' + jam_track.original_artist); - $jamTracksButton.attr('href', '/client?artist=' + jam_track.original_artist + '#/jamtrack') - - if(jam_track.band_jam_track_count == 1) { - $jamTrackNoun.text('JamTrack') - $checkItOut.text(', Check It Out!') - } - context._.each(jam_track.tracks, function (track) { - - var $element = $('
') - - $previews.append($element); - - new context.JK.JamTrackPreview(app, $element, jam_track, track, {master_shows_duration: false}) - }) - - $previews.append('
') - }) - .fail(function () { - app.notify({title: 'Unable to fetch JamTrack', text: "Please refresh the page or try again later."}) - }) - - } - function initialize() { - - $page = $('body') - $jamTrackBandInfo = $page.find('.jamtrack_band_info') - $previews = $page.find('.previews') - $jamTracksButton = $page.find('.browse-jamtracks-wrapper .white-bordered-button') - $jamTrackNoun = $page.find('.jamtrack_noun') - $checkItOut = $page.find('.check-it-out') - - fetchJamTrack(); - } - - this.initialize = initialize; - } - })(window, jQuery); - $(document).on('JAMKAZAM_READY', function(e, data) { var song = new JK.IndividualJamTrackBand(data.app); song.initialize(); diff --git a/web/app/views/landings/product_jamblaster.html.slim b/web/app/views/landings/product_jamblaster.html.slim new file mode 100644 index 000000000..c31e76678 --- /dev/null +++ b/web/app/views/landings/product_jamblaster.html.slim @@ -0,0 +1,37 @@ +- provide(:page_name, 'landing_page full landing_product product_jamblaster') + +.two_by_two + .row + .column + h1.product-headline + | The JamBlaster by JamKazam + p.product-description + | The JamBlaster is a device designed from the ground up to meet the unique requirements of real-time, online, distributed music performance. This device vastly extends the range/distance over which musicians can play together across the Internet. + ul + li Radically reduces audio processing latency compared to today's industry standard computers and audio interfaces. + li Delivers plug-and-play ease of use, with no worries about hardware and software incompatibilities, driver problems, and arcane configurations. + li Combines both a computer and an audio interface into a single elegant device. + li Works with computers (even old crappy ones), tablets or smartphones. + li Works with your favorite recording software applications like Garage Band, Reaper, Pro Tools, etc. + .column + h1 See What You Can Do With The JamBlaster + .video-wrapper + .video-container + iframe src="//www.youtube.com/embed/2Zk7-04IAx4" frameborder="0" allowfullscreen + br clear="all" + .row + .column + h1 + | Want a JamBlaster? Need One? + p If you are a registered member of the JamKazam community, and if you "know" you will buy a JamBlaster for $199 as soon as they become available, then click the button below to add yourself to our wait list. When we get enough "virtual orders", we'll reach back out to all signups to take real orders. + + .cta-big-button + a.white-bordered-button href="#" SIGN UP TO BUY A JAMBLASTER + .column + h1 Want To Know More About Latency? + p + | How is it possible that someone hundreds of miles away could feel like they are 20 feet away from you? Check out this video on latency to understand more: + .linked-video-holder + a href="https://www.youtube.com/watch?v=mB3_KMse-J4" rel="external" Watch Video About Latency - It's Pretty Fascinating + br clear="all" + br clear="all" \ No newline at end of file diff --git a/web/app/views/landings/product_jamtracks.html.slim b/web/app/views/landings/product_jamtracks.html.slim new file mode 100644 index 000000000..a20b16584 --- /dev/null +++ b/web/app/views/landings/product_jamtracks.html.slim @@ -0,0 +1,42 @@ +- provide(:page_name, 'landing_page full landing_product product_jamtracks') + +.two_by_two + .row + .column + h1.product-headline + | JamTracks by JamKazam + p.product-description + | We have 100+ amazing JamTracks. Click the play buttons to hear the master mix and fully isolated track. All are included in each JamTrack. + .previews + .column + h1 See What You Can With JamTracks + .video-wrapper + .video-container + iframe src="//www.youtube.com/embed/2Zk7-04IAx4" frameborder="0" allowfullscreen + br clear="all" + .row + .column + h1 + | Get Your First JamTrack Free Now! + p Click the GET A JAMTRACK FREE button below. Browse to find the one you want, click the Add to cart, and we'll apply a credit during checkout to make the first one free! We're confident you'll be back for more. + + .cta-big-button + a.white-bordered-button href="/client#/jamtrack" GET A JAMTRACK FREE! + .column + h1 Why are JamTracks Better than Backing Tracks? + p + | JamTracks are the best way to play with your favorite music. Unlike traditional backing tracks, JamTracks are complete multitrack recordings, with fully isolated tracks for each part. Used with the free JamKazam app/service, you can: + ul.jamtrack-reasons + li Solo just the individual track you want to play to hear and learn it + li Mute just the track you want to play, and play along with the rest + li Make audio recordings and share them via Facebook or URL + li Make video recordings and share them via YouTube or URL + li And even go online to play JamTracks with others in real time! + br clear="all" + br clear="all" + +javascript: + $(document).on('JAMKAZAM_READY', function (e, data) { + var song = new JK.IndividualJamTrack(data.app); + song.initialize(); + }) \ No newline at end of file diff --git a/web/app/views/landings/product_platform.html.slim b/web/app/views/landings/product_platform.html.slim new file mode 100644 index 000000000..16c2f351c --- /dev/null +++ b/web/app/views/landings/product_platform.html.slim @@ -0,0 +1,40 @@ +- provide(:page_name, 'landing_page full landing_product product_platform') + +.two_by_two + .row + .column + h1.product-headline + | The JamKazam Platform + p.product-description + | JamKazam is an innovative live music platform and social network, enabling musicians to play music together in real time from different locations over the internet as if they are sitting in the same room. The core platform is free to use and delivers immense value: + ul + li Play music from home with your friends and bandmates without packing and transporting gear, and without needing a rehearsal space + li Connect with new musician friends from our community of thousands of musicians to play more often, explore new styles, learn from others + li Find musicians to join your band, or find a band to join, either virtual on JamKazam, or real world to meet and play in person + li Schedule sessions or jump into ad hoc jams + li Make and share recordings or session performances via Facebook or URL + li Live broadcast sessions to family, friends, and fans + li List your band for hire to play gigs at clubs and events + li List yourself for hire to play studio sessions or lay down recorded tracks remotely + .column + h1 See What You Can Do With JamKazam + .video-wrapper + .video-container + iframe src="//www.youtube.com/embed/ylYcvTY9CVo" frameborder="0" allowfullscreen + br clear="all" + .row + .column + h1 + | Sign Up for JamKazam Now, It's Free! + p Yep, seriously. Sign up and start playing music online in real time with your friends - or make new ones from our community of thousands of musicians. It's free to play with others as much as you want. + + .cta-big-button + a.white-bordered-button href="/signup" SIGN UP NOW FOR YOUR FREE ACCOUNT + .column + h1 Does This Really Work? + p + | Feeling skeptical about whether this can actually work? That's natural. We'd encourage you to watch a video of endorsements and kudos from just a few of the musicians who use JamKazam. + .linked-video-holder + a href="https://www.youtube.com/watch?v=_7qj5RXyHCo" rel="external" Check Out Endorsements Of Real Users + br clear="all" + br clear="all" diff --git a/web/config/application.rb b/web/config/application.rb index aac520b7d..6ded2fb75 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -318,5 +318,7 @@ if defined?(Bundler) config.metronome_available = true config.backing_tracks_available = true config.one_free_jamtrack_per_user = true + + config.nominated_jam_track = 'jamtrack-pearljam-alive' end end diff --git a/web/config/routes.rb b/web/config/routes.rb index 15eeeb0ac..aa0b96d70 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -33,6 +33,11 @@ SampleApp::Application.routes.draw do match '/landing/jamtracks/:plan_code', to: 'landings#individual_jamtrack', via: :get, as: 'individual_jamtrack' match '/landing/jamtracks/band/:plan_code', to: 'landings#individual_jamtrack_band', via: :get, as: 'individual_jamtrack_band' + # product pages + match '/products/jamblaster', to: 'landings#product_jamblaster', via: :get, as: 'product_jamblaster' + match '/products/platform', to: 'landings#product_platform', via: :get, as: 'product_platform' + match '/products/jamtracks', to: 'landings#product_jamtracks', via: :get, as: 'product_jamtracks' + # oauth match '/auth/:provider/callback', :to => 'sessions#oauth_callback' match '/auth/failure', :to => 'sessions#failure' diff --git a/web/spec/features/individual_jamtrack_band_spec.rb b/web/spec/features/individual_jamtrack_band_spec.rb index 934762fbf..5db9ac971 100644 --- a/web/spec/features/individual_jamtrack_band_spec.rb +++ b/web/spec/features/individual_jamtrack_band_spec.rb @@ -14,7 +14,6 @@ describe "Individual JamTrack Band", :js => true, :type => :feature, :capybara_f let(:user) { FactoryGirl.create(:user) } let(:jamtrack_acdc_backinblack) { @jamtrack_acdc_backinblack } - let(:jamtrack_pearljam_evenflow) { @jamtrack_pearljam_evenflow } let(:billing_info) { { @@ -44,11 +43,9 @@ describe "Individual JamTrack Band", :js => true, :type => :feature, :capybara_f @created_accounts = [] @jamtrack_acdc_backinblack = FactoryGirl.create(:jam_track, name: 'Back in Black', original_artist: 'AC/DC', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-acdc-backinblack') - @jamtrack_pearljam_evenflow = FactoryGirl.create(:jam_track, name: 'Even Flow', original_artist: 'Pearl Jam', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-pearljam-evenflow') # make sure plans are there @recurlyClient.create_jam_track_plan(@jamtrack_acdc_backinblack) unless @recurlyClient.find_jam_track_plan(@jamtrack_acdc_backinblack) - @recurlyClient.create_jam_track_plan(@jamtrack_pearljam_evenflow) unless @recurlyClient.find_jam_track_plan(@jamtrack_pearljam_evenflow) end @@ -82,6 +79,9 @@ describe "Individual JamTrack Band", :js => true, :type => :feature, :capybara_f end end find('a.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack") + + find('a.white-bordered-button').trigger(:click) + find('h1', text: 'jamtracks') end it "logged in" do @@ -98,6 +98,9 @@ describe "Individual JamTrack Band", :js => true, :type => :feature, :capybara_f end end find('a.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack") + + find('a.white-bordered-button').trigger(:click) + find('h1', text: 'jamtracks') end end end diff --git a/web/spec/features/individual_jamtrack_spec.rb b/web/spec/features/individual_jamtrack_spec.rb index 1a516edc1..7aa9db507 100644 --- a/web/spec/features/individual_jamtrack_spec.rb +++ b/web/spec/features/individual_jamtrack_spec.rb @@ -14,7 +14,6 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur let(:user) { FactoryGirl.create(:user) } let(:jamtrack_acdc_backinblack) { @jamtrack_acdc_backinblack } - let(:jamtrack_pearljam_evenflow) { @jamtrack_pearljam_evenflow } let(:billing_info) { { @@ -44,11 +43,9 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur @created_accounts = [] @jamtrack_acdc_backinblack = FactoryGirl.create(:jam_track, name: 'Back in Black', original_artist: 'AC/DC', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-acdc-backinblack') - @jamtrack_pearljam_evenflow = FactoryGirl.create(:jam_track, name: 'Even Flow', original_artist: 'Pearl Jam', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-pearljam-evenflow') # make sure plans are there @recurlyClient.create_jam_track_plan(@jamtrack_acdc_backinblack) unless @recurlyClient.find_jam_track_plan(@jamtrack_acdc_backinblack) - @recurlyClient.create_jam_track_plan(@jamtrack_pearljam_evenflow) unless @recurlyClient.find_jam_track_plan(@jamtrack_pearljam_evenflow) end @@ -82,6 +79,9 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur end end find('a.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack") + + find('a.white-bordered-button').trigger(:click) + find('h1', text: 'jamtracks') end it "logged in" do @@ -98,6 +98,9 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur end end find('a.white-bordered-button')['href'].should eq("/client?artist=#{jamtrack_acdc_backinblack.original_artist}#/jamtrack") + + find('a.white-bordered-button').trigger(:click) + find('h1', text: 'jamtracks') end it "generic version" do @@ -114,6 +117,9 @@ describe "Individual JamTrack", :js => true, :type => :feature, :capybara_featur end end find('a.white-bordered-button')['href'].should eq("/client#/jamtrack") + + find('a.white-bordered-button').trigger(:click) + find('h1', text: 'jamtracks') end end end diff --git a/web/spec/features/products_spec.rb b/web/spec/features/products_spec.rb new file mode 100644 index 000000000..634d768f3 --- /dev/null +++ b/web/spec/features/products_spec.rb @@ -0,0 +1,122 @@ +require 'spec_helper' + +describe "Product Pages", :js => true, :type => :feature, :capybara_feature => true do + + subject { page } + + before(:all) do + ShoppingCart.delete_all + JamTrackRight.delete_all + JamTrack.delete_all + JamTrackTrack.delete_all + JamTrackLicensor.delete_all + end + + let(:user) { FactoryGirl.create(:user) } + let(:jamtrack_acdc_backinblack) { @jamtrack_acdc_backinblack } + + let(:billing_info) { + { + first_name: 'Seth', + last_name: 'Call', + address1: '10704 Buckthorn Drive', + city: 'Austin', + state: 'Texas', + country: 'US', + zip: '78759', + number: '4111111111111111', + month: '08', + year: '2017', + verification_value: '012' + } + } + + def create_account(user, billing_info) + @recurlyClient.create_account(user, billing_info) + @created_accounts << user + end + + + before(:all) do + + @recurlyClient = RecurlyClient.new + @created_accounts = [] + + @jamtrack_acdc_backinblack = FactoryGirl.create(:jam_track, name: 'Back in Black', original_artist: 'AC/DC', sales_region: 'United States', make_track: true, plan_code: 'jamtrack-acdc-backinblack') + + # make sure plans are there + @recurlyClient.create_jam_track_plan(@jamtrack_acdc_backinblack) unless @recurlyClient.find_jam_track_plan(@jamtrack_acdc_backinblack) + end + + + after(:each) do + @created_accounts.each do |user| + if user.recurly_code + begin + @account = Recurly::Account.find(user.recurly_code) + if @account.present? + @account.destroy + end + rescue + end + end + end + end + + describe "JamBlaster" do + it "logged out" do + visit "/products/jamblaster" + + find('h1', text: 'The JamBlaster by JamKazam') + find('a.white-bordered-button')['href'].should eq("#") # nowhere to go yet + end + + it "logged in" do + fast_signin(user, "/products/jamblaster") + + find('h1', text: 'The JamBlaster by JamKazam') + find('a.white-bordered-button')['href'].should eq("#") # nowhere to go yet + end + end + + describe "Platform" do + it "logged out" do + visit "/products/platform" + + find('h1', text: 'The JamKazam Platform') + find('a.white-bordered-button').trigger(:click) + + find('h2', text: 'Create your free JamKazam account') + end + + it "logged in" do + fast_signin(user, "/products/platform") + + find('h1', text: 'The JamKazam Platform') + find('a.white-bordered-button').trigger(:click) + + # clicking /signup just redirects you to the client + find('h2', text: 'create session') + end + end + + describe "JamTracks" do + it "logged out" do + visit "/products/jamtracks" + + find('h1', text: 'JamTracks by JamKazam') + find('a.white-bordered-button').trigger(:click) + + find('h1', text: 'jamtracks') + end + + it "logged in" do + fast_signin(user, "/products/jamtracks") + + find('h1', text: 'JamTracks by JamKazam') + find('a.white-bordered-button').trigger(:click) + + find('h1', text: 'jamtracks') + end + end +end