Last active
August 29, 2015 14:06
-
-
Save burt202/1708d7987059ef84bc07 to your computer and use it in GitHub Desktop.
Playing With Promises
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
node_modules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "promise-tests", | |
"version": "0.0.1", | |
"dependencies": { | |
"q": "1.0.1", | |
"underscore": "1.7.0", | |
"jasmine-node": "1.14.5" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var UserService = require("./service"); | |
var userService; | |
describe("user service with promises", function () { | |
beforeEach(function () { | |
userService = new UserService(); | |
}); | |
afterEach(function () { | |
userService = null; | |
}); | |
it("should successfully list all users", function (done) { | |
userService.create({ title: "mr", name: "foo"}) | |
.then(function () { return userService.create({ title: "mrs", name: "bar"}); }) | |
.then(function () { return userService.clone(2, {name: "baz"}); }) | |
.then(function () { | |
expect(userService.getAll()).toEqual([ | |
{ title: "mr", name: "foo", id: 1}, | |
{ title: "mrs", name: "bar", id: 2}, | |
{ title: "mrs", name: "baz", id: 3} | |
]); | |
done(); | |
}) | |
.done(); | |
}); | |
it("should fail with error 'There was an error finding the user'", function (done) { | |
userService.create({ title: "mr", name: "foo"}) | |
.then(function () { return userService.create({ title: "mrs", name: "bar"}); }) | |
.then(function () { return userService.clone(4, {name: "baz"}); }) | |
.fail(function (err) { | |
expect(err.message).toEqual("There was an error finding the user"); | |
done(); | |
}) | |
.done(); | |
}); | |
it("should fail with error 'User must have a name'", function (done) { | |
userService.create({ title: "mr", name: "foo"}) | |
.then(function () { return userService.create({ title: "mrs", name: "bar"}); }) | |
.then(function () { return userService.clone(2, {name: ""}); }) | |
.fail(function (err) { | |
expect(err.message).toEqual("User must have a name"); | |
done(); | |
}) | |
.done(); | |
}); | |
it("should fail with error 'User with that name already exists'", function (done) { | |
userService.create({ title: "mr", name: "foo"}) | |
.then(function () { return userService.create({ title: "mrs", name: "bar"}); }) | |
.then(function () { return userService.clone(2, {name: "bar"}); }) | |
.fail(function (err) { | |
expect(err.message).toEqual("User with that name already exists"); | |
done(); | |
}) | |
.done(); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var q = require("q"); | |
var _ = require("underscore"); | |
var UserService = function () { | |
var users = []; | |
var insertId = 0; | |
return { | |
get: function (id) { | |
var deferred = q.defer(); | |
var user = _.findWhere(users, {id: id}); | |
if (!user) { | |
deferred.reject(new Error("There was an error finding the user")); | |
} else { | |
deferred.resolve(_.clone(user)); | |
} | |
return deferred.promise; | |
}, | |
getAll: function () { | |
return users; | |
}, | |
create: function (data) { | |
var deferred = q.defer(); | |
if (!data.name || data.name === "") { | |
deferred.reject(new Error("User must have a name")); | |
return deferred.promise; | |
} | |
var nameAlreadyTaken = _.findWhere(users, {name: data.name}); | |
if (nameAlreadyTaken) { | |
deferred.reject(new Error("User with that name already exists")); | |
return deferred.promise; | |
} | |
insertId++; | |
data.id = insertId; | |
users.push(data); | |
deferred.resolve(data); | |
return deferred.promise; | |
}, | |
clone: function (userId, overrides) { | |
var deferred = q.defer(); | |
this.get(userId) | |
.then(function (data) { | |
var clonedUser = _.extend(data, overrides); | |
delete clonedUser.id; | |
return this.create(clonedUser); | |
}.bind(this)) | |
.then(function (data) { | |
deferred.resolve(data); | |
}) | |
.fail(function (err) { | |
deferred.reject(err); | |
}); | |
return deferred.promise; | |
} | |
}; | |
}; | |
module.exports = UserService; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment