Giter VIP home page Giter VIP logo

envoy's People

Stargazers

 avatar

Watchers

 avatar  avatar

envoy's Issues

WebDriver tests take forever

Our webdriver test suite

  • purges the database,
  • starts meteor (and mongo),
  • loads database fixtures,
  • starts firefox,
  • runs test code,
  • and posts coverage info

For each test. It takes a long time. We need to parallelize tests or otherwise speed things up so that developers can get faster test feedback.

Update README.md for developing locally

The easiest ways to make changes, build, and test envoy have (dramatically) diverged from what's recommended in the 0.0.1 README. We should update the material there for the 0.1.0 release.

Flaky test case in integration/game_test.js

 1) game clicking card in hand:
     StaleElementReferenceError: Element is no longer attached to the DOM
Command duration or timeout: 10 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.40.0', revision: 'fbe29a9', time: '2014-02-19 20:54:28'
System info: host: 'box706', ip: '127.0.0.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.8.0-35-ref-generic', java.version: '1.7.0_55'
Session ID: eddb8567-39ca-4f3d-b371-d1065d01da27
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=26.0}]
      at new bot.Error (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/atoms/error.js:109:18)
      at Object.bot.response.checkResponse (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
      at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:276:20
      at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
      at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
      at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
      at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
      at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
      at fulfill (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:493:5)
      at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1465:10
  ==== async task ====
  WebElement.isDisplayed()
      at webdriver.WebDriver.schedule (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:267:15)
      at webdriver.WebElement.schedule_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1609:23)
      at webdriver.WebElement.isDisplayed (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1947:15)
      at /home/ubuntu/envoy/test/integration/lib/helper.js:13:28
      at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
      at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
      at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
      at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
      at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
  ==== async task ====
      at webdriver.promise.ControlFlow.wait (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1355:15)
      at webdriver.WebDriver.wait (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:531:21)
      at /home/ubuntu/envoy/test/integration/game_test.js:176:23
      at /home/ubuntu/envoy/node_modules/selenium-webdriver/lib/goog/base.js:1178:15
      at webdriver.promise.ControlFlow.runInNewFrame_ (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
      at notify (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:428:12)
      at notifyAll (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:397:7)
      at resolve (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:375:7)
      at fulfill (/home/ubuntu/envoy/node_modules/selenium-webdriver/lib/webdriver/promise.js:493:5)

Gameplay

  • Users decks are initially shuffled.
  • Users hands start with 6 cards.
  • Users can update players' life totals.
  • Users can click on cards in their hand and cast them to energy, put them in play (face up or face down), or put them in the graveyard.
  • Users can click on cards in play and put them in their hand or graveyard.
  • Users can click on cards in their graveyard and put them in their hand or into play.
  • Users can click their decks to draw.

Add tests for login

Most interactions in envoy will be between logged in users, so we need an easy way for the integration tests to log in.

Test suite should not make changes to source code

Currently, when we instrument our codebase for coverage with istanbul, we modify our source code. This is bad. It's even worse when the tests fail and bail partway through the suite and leave our codebase in an unstable state. We should build, instrument, and pass off our code to meteor in a scratch space.

jshint is suspiciously quiet

In fed7dc7, we added jshint. It has never (in my experience) complained about code correctness/style. We should make add a .jshintrc file to make sure that jshint is configured well.

Game UI

Users should be able to read all of the game state from the gameplay ui. This information includes:

  • Cards in user's hand.
  • Number of cards in opponent's hand.
  • Cards in play.
  • Cards in graveyards.
  • Number of cards in each deck.
  • Each player's life total.
  • Each player's energy.

Visual refresh

v0.1.0 introduced a lot of gameplay ui and functionality. It's extremely unsightly and we should change that for v0.2.0.

Game Creation and Configuration

As a user, I would like to be able to create and configure a game with the deck (custom or prebuilt) of my choice. Once the game is created, it should be added to a queue of open games so that I can find an opponent. Other players should be able to join my game while I don't have an opponent.

Configure docker container(s) for envoy

From the README:

To run envoy locally, you must first globally install:

firefox
java
meteor
mongodb
xvfb

I would consider using docker to package your dependencies (either as one bigass container or multiple?) then using volume mounts to run stuff... its a lot lighter weight then vagrant and is much faster. I wrote a blog post about this http://lightsofapollo.github.io/2014/01/31/docker-volumes/

Sadly there are not too many options to deploy the docker containers outright (but the process is very similar to what heroku does to generate their LXC containers)

Should be able to develop and test simultaneously

Setting up to develop with grunt build is really easy! However, the test suite also builds the app and both the development and test workflows make use of the /build directory. We should use two different directories to avoid development and test collisions. Also, we should run meteor and mongo on different ports during testing to avoid port collisions.

Document how to contribute to envoy

The project is starting to take shape as the codebase grows. I'm really enjoying being able to move fast because stuff works and I'm doing things my way. We should document what that is in the hopes that my process is good process!

Only publish/subscribe the data each client needs

We have [thus far] been too willy nilly about syncing all of our data to every client all the time. This has serious performance implications! We should take some time for v0.2.0 to make sure that we're only syncing that needs to be sent to each client.

Add a grunt task to build envoy on save

In dbf6ddc we added a "build" task that decoupled our source tree from the actual running of our app. This was a good thing. However, it also means that meteor's nice live updates are no longer working. We should add a grunt task to rebuild envoy when the source tree changes.

Speed up incremental builds

In c208c45 we added an incremental, as-you-save build task that watches the app directory for source code changes and copies them over to build. Sadly, this is quite slow. We should speed things up by doing something like polling the filesystem more frequently or only copying over files which have been changed instead of the whole source tree.

Upgrade to meteor 0.8.0

Meteor 0.8.0 is out with a faster templating engine called blaze. We should upgrade from 0.7. 2/spark.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.