diff --git a/.travis.yml b/.travis.yml index f31876b..c55b442 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,11 @@ env: global: - secure: RhmfgnPkrCcjOTWkfYFZS5zlBQhte2cAAtjA/bIKH4qhaLsWHHS0ApJ065PJs4H/lfslWSfnRcUpaeFq8hhr/9dMlCxFJc5CTJ2EfmV56NjsiaETtrxHdNVFtZU/DxJnSxnW4revbFkk/mM6JZ+P7XwVv+iitKhx3uRpX2/rKWA= - secure: hmu/VH1viA8oPFjxBrjvnLrNa0PnfXsIKMMv9ZmgpXthdhTtuReD9rPmbnFzNh9MyCkLSZcndJakpDu9SwHVDcs5eyV72fuXHW/0htyN9eNTMyShrNIpOJe6JUqMez7MxQU9J45IJGSvbyEfrbZ20mbGGzJ41KnEZ0IfwODPcMY= + - secure: JrGUKctdLs9cwJlLtAHahYlJmE0jGt4/Rkt6RMD20btQcBhcvAmTJFICsYaac4h5cc0krStkeskXkZ8YANhB3OGzbLw7PGcTjnFUvVwpZKRmnsUV6puwEUH0AC6XNl4J2r9G8wPOZyy4WVxZlbdFi9To8dc8X2iufo2RyWf3MDK+OHm0CuMj6JXnJzA5FMk3pxZOjopG2W0/uAZETd9FPWmm8J6NZRsvx4nsQz2/eBjH2+MaoQYK4AcqvFFjwuume2Oali8+NQLyu7zpbfaLtLBg9+53hc59KFB/ha8Q6o0APz6rtTtgwRDckFHUVaxduTaWyKXvD0Krj3d1BvDnZVRebx4OYLstHUfnY4B6CCgKJ0ZdLVIf+I6UtHKoDu+qNc0e7EYY9rRDwFAJiE1OU+QhVE+m5UbUxHY0pCvbiKSsKe7vpe0dDvrsnuZTw8N53n7ZQF3QbMhxwLD+GONWWK6RLK1gbVbvcrBCtBsFPr6rWyYMQPPM09+aKmRTW2uRGAuf8tudiKf19Znd4EMKjVnGAW5qDxEJ2o9x357BXLCjeNH/BjxLOW4oH3bqukMXE4EmLpb6eUXCKVaRUD4+adqw8E3/iKaowotwwPl39dnqk5AmiXY4ID6vaTtFlyg1axDUfZwFysObIP1T+SDMDu2Nx3VQMlRKC4AOOmDz5co= + - secure: Qul/FmeTIuC6origZyNVniL8xm7ah29V0DJVvx7OP2+ibOtORuTa9od7gyZyhc3cuCegAaL8Q+kAxiNedy7m/UdE5eDvgSBpVJsO7g1DxSlb9dB082BSY+7VSjYY9Q08koJgTZZ/pnV3MSL9TaQzxn+HTH/nIiHgn+ZaQ0l19kjzeGclkN7HgPwpjNhb6OAtwTjf82Ys10nunv0pATgmc4BkqXP/UnJ0DXF8+tO+AVz2IRYstk0j5u75UOONvp7OTt4cpZqBK3iDY2zljduXnJ4NbOwdwi8dBk2tOLQCq+il28kM/adsyUomcj8h3qAN4RQD95yE37XZQrx1bT+aJLtphQKsaYmDFVdj5OWOOAjTyZ3J7FROyRmI74tPAAfEXBxueuP15Jlogyci3Bp341cgtBu7EX9etd2W1uTSVWDiUfFedIXgE8py5PFSX48SC0ay6hkeMei7wQ5R4d7tpuQpJ1f/zXR4YsdgKcTHU7XM13nP8QrSAa76QhRtubW0KPoIncftzvw/UKjc5pofqd8+ylQ66Xhig92jabyLKY+1CmfSRaBgj0IqLmCB08SOW7NnvPVAYqqnYNHpdCQMMrqKzMgJepBAruD/PnFAQ6/0Z6Gbkh8AUqkghMXUkf2oxz9uHyIAGf4Lo0T+BBaZWNsh9fitHdCO3YLCiVnet+Y= before_install: - npm install -g bower - npm install -g grunt-cli - - npm install -g protractor && webdriver-manager update install: - npm install script: diff --git a/Gruntfile.js b/Gruntfile.js index 88a1289..1101308 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -157,7 +157,10 @@ module.exports = function (grunt) { } }, production: { - src: ["<%= config.outputDir %>js/app.min.js", "./app/components/angular-mocks/angular-mocks.js"] + options: { + vendor: ["<%= config.vendorFiles %>"] + }, + src: ["<%= config.outputDir %><%= pkg.name %>.min.js", "./app/components/angular-mocks/angular-mocks.js"] } }, @@ -249,6 +252,14 @@ module.exports = function (grunt) { src: ["**/*", "*"], dest: "<%= config.outputDir %>data/" }] + }, + e2e: { + files: [{ + expand: true, + cwd: "./app/components", + src: ["angular/angular.js"], + dest: "<%= config.outputDir %>components/" + }] } }, diff --git a/README.md b/README.md index 1d28727..df99cc9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # snInfiniteScroll -[![Build Status](https://travis-ci.org/thisissoon/sn-infinite-scroll.svg?branch=master)](https://travis-ci.org/thisissoon/sn-infinite-scroll) -[![Coverage Status](https://coveralls.io/repos/thisissoon/sn-infinite-scroll/badge.svg)](https://coveralls.io/r/thisissoon/sn-infinite-scroll) +[![Build Status](https://travis-ci.org/thisissoon/angular-infinite-scroll.svg?branch=master)](https://travis-ci.org/thisissoon/angular-infinite-scroll) +[![Coverage Status](https://coveralls.io/repos/thisissoon/angular-infinite-scroll/badge.svg)](https://coveralls.io/github/thisissoon/angular-infinite-scroll) Simple, lightweight infinite scrolling for Angular, with no other dependencies. diff --git a/app/index.html b/app/index.html index 6bd4a7c..1e88580 100644 --- a/app/index.html +++ b/app/index.html @@ -1,8 +1,8 @@ - - - - + + + + @@ -40,11 +40,24 @@ - - + -
+ + +
+

Infinite list of users

+
+

{{ user.name }}

+
@@ -68,10 +81,57 @@ + + + + + + + diff --git a/package.json b/package.json index bd24bb4..e2420ff 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "grunt-contrib-concat": "~0.5.1", "grunt-contrib-connect": "~0.10.1", "grunt-contrib-copy": "~0.8.0", - "grunt-contrib-jasmine": "~0.8.2", + "grunt-contrib-jasmine": "~0.9.1", "grunt-contrib-jshint": "~0.11.1", "grunt-contrib-less": "~1.0.1", "grunt-contrib-uglify": "~0.9.1", diff --git a/tests/e2e/app.e2e.js b/tests/e2e/app.e2e.js index a6322ad..71ac762 100644 --- a/tests/e2e/app.e2e.js +++ b/tests/e2e/app.e2e.js @@ -7,11 +7,12 @@ * @module sn.infiniteScroll.e2e * @author SOON_ */ -angular.module("sn.infiniteScroll.e2e", ["sn.infiniteScroll", "ngMockE2E"]) +angular.module("sn.infiniteScroll.e2e", ["sn.infiniteScroll.demo", "ngMockE2E"]) .run([ "$httpBackend", function ($httpBackend) { + $httpBackend.whenGET(/users.*/).respond(200, { items: [{ name: "Micheal Mariah" },{ name: "Ste Letha" },{ name: "Rachel Lorena" },{ name: "Annabella Abby" }], total: 10, _pagination: { total: 3, current: 1, limit: 4 }}); $httpBackend.whenGET(/partials\/.*/).passThrough(); } diff --git a/tests/e2e/protractor.saucelabs.conf.js b/tests/e2e/protractor.saucelabs.conf.js index 7d7d9ef..5428f8c 100644 --- a/tests/e2e/protractor.saucelabs.conf.js +++ b/tests/e2e/protractor.saucelabs.conf.js @@ -26,41 +26,47 @@ exports.config = { "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, "build": process.env.TRAVIS_BUILD_NUMBER, "name": pkg.name + " (Chrome: Linux) Build: " + process.env.TRAVIS_BUILD_NUMBER, - "version": "39", - "selenium-version": "2.43.1", - "platform": "Linux" + "version": "43.0", + "selenium-version": "2.46.0", + "chromedriver-version": "2.14", + "platform": "Windows 8.1", + "screenResolution": "1024x768" }, { "browserName": "firefox", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, "build": process.env.TRAVIS_BUILD_NUMBER, "name": pkg.name + " (FF: Linux) Build: " + process.env.TRAVIS_BUILD_NUMBER, - "version": "34", - "selenium-version": "2.43.1", - "platform": "Linux" + "version": "39.0", + "selenium-version": "2.46.0", + "platform": "Linux", + "screenResolution": "1024x768" }, { "browserName": "safari", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, "build": process.env.TRAVIS_BUILD_NUMBER, "name": pkg.name + " (Safari: OS X 10.10) Build: " + process.env.TRAVIS_BUILD_NUMBER, "version": "8", - "selenium-version": "2.43.1", - "platform": "OS X 10.10" + "selenium-version": "2.44.0", + "platform": "OS X 10.10", + "screenResolution": "1024x768" }, { "browserName": "internet explorer", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, "build": process.env.TRAVIS_BUILD_NUMBER, "name": pkg.name + " (IE11: Win 8.1) Build: " + process.env.TRAVIS_BUILD_NUMBER, "version": "11", - "selenium-version": "2.43.1", - "platform": "Windows 8.1" + "selenium-version": "2.46.0", + "platform": "Windows 8.1", + "screenResolution": "1024x768" }, { "browserName": "internet explorer", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, "build": process.env.TRAVIS_BUILD_NUMBER, "name": pkg.name + " (IE10: Win 8) Build: " + process.env.TRAVIS_BUILD_NUMBER, "version": "10", - "selenium-version": "2.43.1", - "platform": "Windows 8" + "selenium-version": "2.46.0", + "platform": "Windows 8", + "screenResolution": "1024x768" }, { "browserName": "chrome", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, @@ -71,7 +77,8 @@ exports.config = { "platformName": "Android", "appiumVersion": "1.3.4", "deviceName": "Android Emulator", - "device-orientation": "portrait" + "device-orientation": "portrait", + "selenium-version": "2.46.0" }, { "browserName": "safari", "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER, @@ -83,7 +90,8 @@ exports.config = { "appiumVersion": "1.3.4", "platform": "iOS", "deviceName": "iPhone Simulator", - "device-orientation": "portrait" + "device-orientation": "portrait", + "selenium-version": "2.46.0" }], // ----- More information for your tests ---- diff --git a/tests/e2e/specs/scenarios.js b/tests/e2e/specs/scenarios.js index fad8d53..1416c6b 100644 --- a/tests/e2e/specs/scenarios.js +++ b/tests/e2e/specs/scenarios.js @@ -2,70 +2,50 @@ /* https://github.com/angular/protractor/blob/master/docs/getting-started.md */ -describe("myApp", function() { +describe("sn.infiniteScroll", function() { - describe("search", function() { + var scrollTo = function scrollTo (y) { + return "document.querySelector('.infinite-scroll').scrollTop =" + y; + }; - beforeEach(function(){ - browser.manage().deleteAllCookies(); - browser.get("http://127.0.0.1:8000/"); - browser.waitForAngular(); - browser.driver.sleep(2000); - }); - - it("should automatically redirect to / when location hash/fragment is empty", function() { - expect(browser.getLocationAbsUrl()).toMatch("/"); - }); - - it("should render home partial when user navigates to /", function() { - expect(element.all(by.css("ng-view h1")).first().getText()).toContain("Search"); - }); + beforeEach(function() { + browser.get("http://127.0.0.1:8000/"); + browser.waitForAngular(); + browser.driver.sleep(2000); + }); - it("should search for location", function() { - element(by.model("location")).sendKeys("London"); - element(by.buttonText("Submit")).click(); + it("should load more pages on scroll to bottom of list (8 items total)", function() { - browser.driver.sleep(5000); + // confirm initial state + expect(element.all(by.repeater("user in users")).count()).toEqual(4); - browser.driver.wait(function() { - return browser.driver.getCurrentUrl().then(function (url) { - return /results/.test(url); - }); - }); - expect(browser.getLocationAbsUrl()).toMatch("/results"); - expect(element.all(by.repeater("result in results")).count()).toEqual(4); - }); + // 2nd page + browser.executeScript(scrollTo(2000)); + browser.driver.sleep(2000); + expect(element.all(by.repeater("user in users")).count()).toEqual(8); }); + it("should load more pages on scroll to bottom of list (12 items total)", function() { - describe("results", function() { - - beforeEach(function(){ - browser.get("http://127.0.0.1:8000/results"); - browser.waitForAngular(); - browser.driver.sleep(2000); - }); + // 3rd page + browser.executeScript(scrollTo(2000)); + browser.executeScript(scrollTo(4000)); + browser.driver.sleep(2000); - it("should render results page view", function() { - expect(element.all(by.css("ng-view h1")).first().getText()).toContain("Results"); - expect(element(by.css(".alert-info")).getText()).toContain("No results"); + expect(element.all(by.repeater("user in users")).count()).toEqual(12); - }); - - it("should go back to search page view", function() { - element(by.css("a.home")).click(); - - browser.driver.wait(function() { - return browser.driver.getCurrentUrl().then(function (url) { - return /\//.test(url); - }); - }); + }); - expect(browser.getLocationAbsUrl()).toMatch("/"); + it("should NOT load more pages on scroll to bottom of list", function() { - }); + // 4th page - shouldn't exist + browser.executeScript(scrollTo(2000)); + browser.executeScript(scrollTo(4000)); + browser.executeScript(scrollTo(6000)); + browser.driver.sleep(2000); + expect(element.all(by.repeater("user in users")).count()).toEqual(12); }); });