Skip to content
This repository has been archived by the owner on Dec 16, 2023. It is now read-only.

Commit

Permalink
Added Vanity.split.completed
Browse files Browse the repository at this point in the history
  • Loading branch information
assaf committed Mar 30, 2012
1 parent 7fe97cf commit 40780c2
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 13 deletions.
2 changes: 1 addition & 1 deletion node/package.json
@@ -1,5 +1,5 @@
{ "name": "vanity",
"version": "0.2.2",
"version": "0.3.0",
"description": "Vanity Node.js client",
"author": "Assaf Arkin <assaf@labnotes.org> (http://labnotes.org/)",
"main": "vanity",
Expand Down
88 changes: 88 additions & 0 deletions node/test/split_test.coffee
Expand Up @@ -95,6 +95,94 @@ describe "split", ->
done()


# -- Completing split test --

describe "add participant and complete", ->
outcome = null

describe "no value", ->
before (done)->
split.show("79d778d8")
split.completed "79d778d8", (error, result)->
outcome = result
done()

it "should set outcome to zero", ->
assert.equal outcome, 0

it "should store alternative", (done)->
split.get "79d778d8", (error, { joined, alternative })->
assert.equal alternative, 0
assert joined - Date.now() < 1000
done()

it "should store outcome", (done)->
split.get "79d778d8", (error, { completed, outcome })->
assert.equal outcome, 0
assert completed - Date.now() < 1000
done()


describe "with value", ->
before (done)->
split.show("23c5b1da")
split.completed "23c5b1da", 5, (error, result)->
outcome = result
done()

it "should set outcome to five", ->
assert.equal outcome, 5

it "should store outcome", (done)->
split.get "23c5b1da", (error, { completed, outcome })->
assert.equal outcome, 5
assert completed - Date.now() < 1000
done()


describe "just complete", ->
outcome = null

before (done)->
split.completed "163b06c0", (error, result)->
outcome = result
done()

it "should set outcome to zero", ->
assert.equal outcome, 0

it "should store alternative", (done)->
split.get "163b06c0", (error, { joined, alternative })->
assert.equal alternative, 1
assert joined - Date.now() < 1000
done()

it "should store outcome", (done)->
split.get "163b06c0", (error, { completed, outcome })->
assert.equal outcome, 0
assert completed - Date.now() < 1000
done()


describe "two completions", ->
outcome = null

before (done)->
split.completed "3f8aab31", 7, (error, result)->
split.completed "3f8aab31", 9, (error, result)->
outcome = result
done()

it "should set outcome to first value", ->
assert.equal outcome, 7

it "should store first value", (done)->
split.get "3f8aab31", (error, { completed, outcome })->
assert.equal outcome, 7
assert completed - Date.now() < 1000
done()


# -- Error handling --

describe "invalid test name", ->
Expand Down
35 changes: 23 additions & 12 deletions node/vanity.js
Expand Up @@ -265,7 +265,10 @@ SplitTest.prototype.get = function(participant, callback) {
var result;
if (body) {
result = JSON.parse(body);
result.joined = new Date(result.joined);
if (result.joined)
result.joined = new Date(result.joined);
if (result.completed)
result.completed = new Date(result.completed);
}
callback(error, result);
})
Expand All @@ -286,21 +289,29 @@ SplitTest.hash = function(identifier) {
}


/*
SplitTest.prototype.completed = function(participant, outcome) {
var params = {
alernative: alernative;
outcome: outcome;
SplitTest.prototype.completed = function(participant, outcome, callback) {
if (typeof(outcome) == "function") {
callback = outcome;
outcome = 0;
}
Request.put({ url: this.baseUrl + participant }, json: params, function(error, response, body) {
if (error)
self.emit("error", error)
else if (response.statusCode >= 400)
self.emit("error", new Error("Server returned " + response.statusCode + ": " + body));

var cached = this._cache[participant],
params = {
alternative: (cached == undefined ? (SplitTest.hash(participant) % this.alternatives) : cached),
outcome: outcome
};
Request.put({ url: this.baseUrl + participant, json: params }, function(error, response, body) {
// There are protocol errors (error) and server reported errors (4xx and
// 5xx).
if (!error && response.statusCode >= 400)
error = new Error("Server returned " + response.statusCode + ": " + body);
if (callback)
callback(error, body && body.outcome)
else if (error)
vanity.emit("error", error)
})
}

*/


module.exports = Vanity

0 comments on commit 40780c2

Please sign in to comment.