Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
node_modules/
public/bin/
public/bin/
3 changes: 2 additions & 1 deletion app/input/user_input.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export default new GraphQLInputObjectType({
name: 'UserInput',
fields: {
_id: {type: GraphQLID},
name: {type: GraphQLString}
username: {type: GraphQLString},
password: {type: GraphQLString}
}
});
5 changes: 4 additions & 1 deletion app/model/user_model.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import mongoose from 'mongoose';

var userSchema = new mongoose.Schema({
name: {
username: {
type: String
},
password: {
type: String
}
});

Expand Down
5 changes: 4 additions & 1 deletion app/type/user_type.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import {
export default new GraphQLObjectType({
name: 'User',
fields: {
name: {
username: {
type: GraphQLString
},
password: {
type: GraphQLString
},
_id: {
Expand Down
15 changes: 11 additions & 4 deletions public/adapters/request_adapter.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
class RequestAdapter {
constructor(url) {
}

send(data) {
static send(payload, callback) {
let request = new XMLHttpRequest();
request.open("POST", "/graphql", true);
request.setRequestHeader("Content-Type","application/json");
request.setRequestHeader("Accept", "application/json");
request.send(payload);
request.onreadystatechange = () => {
if (request.readyState === 4) {
callback(request.responseText);
}
}
}
}

Expand Down
8 changes: 7 additions & 1 deletion public/component/register.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { withStyles } from 'material-ui/styles';

import UserProtocol from "protocols/user_protocol";
import UserModel from "models/user_model";
import RequestAdapter from "adapters/request_adapter";

class Register extends React.Component {
constructor(props) {
Expand All @@ -27,7 +28,12 @@ class Register extends React.Component {
}

register(username, password) {
UserProtocol.register(new UserModel({ username: username, password: password }));
let payload = new UserModel({ username: username.value , password: password.value }).mutationBuild();
let callback = (result) => {
console.log(result);
};

RequestAdapter.send(payload, callback);
}

render() {
Expand Down
27 changes: 20 additions & 7 deletions public/models/user_model.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
class UserModel {
constructor(element = {}) {
this._username = element.username;
this._password = element.password;
constructor(data) {
this.username = data.username;
this.password = data.password;
}

get username() {
return this._username || "";
username() {
return this.username || "";
}

get password() {
return this._password || "";
password() {
return this.password || "";
}

mutationBuild() {
return JSON.stringify({
query: "mutation {"+
"addUser("+
"data: { "+
"username:"+ '"' + this.username + '"' + "," +
"password:"+ '"' + this.password + '"' +
"}" +
")"+
"}"
});
}
}

Expand Down
17 changes: 17 additions & 0 deletions spec/app/input/user_input_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import UserInput from "app/input/user_input";

describe("UserInput", () => {
describe(".default", () => {
it("return new graphql input object type", () => {
expect(UserInput.name).toEqual("UserInput");
expect(UserInput._typeConfig.name).toEqual("UserInput");
expect(UserInput._typeConfig.fields.hasOwnProperty("_id")).toEqual(true);
expect(UserInput._typeConfig.fields.hasOwnProperty("username")).toEqual(true);
expect(UserInput._typeConfig.fields.hasOwnProperty("password")).toEqual(true);

expect(UserInput._typeConfig.fields._id.type.name).toEqual("ID");
expect(UserInput._typeConfig.fields.username.type.name).toEqual("String");
expect(UserInput._typeConfig.fields.password.type.name).toEqual("String");
});
});
});
24 changes: 12 additions & 12 deletions spec/components/register_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from "react";
import { shallow, mount } from "enzyme";

import Register from "components/register";
import UserProtocol from "protocols/user_protocol";
import RequestAdapter from "adapters/request_adapter";
import UserModel from "models/user_model";

describe("<Register />", () => {
Expand All @@ -14,30 +14,30 @@ describe("<Register />", () => {
});

describe("#registerClick", () => {
it("should call Register#register when clicked on register button", () => {
let component, e, rendered, spy;
it("should call Register#register when clicked on register button", () => {
let component, e, rendered, spy;

e = { preventDefault: jasmine.createSpy("preventDefault") };
e = { preventDefault: jasmine.createSpy("preventDefault") };

spy = spyOn(Register.prototype, "register");
rendered = mount(<Register />);
rendered.find('button').simulate('click', 'using prototype');
spy = spyOn(Register.prototype, "register");
rendered = mount(<Register />);
rendered.find('button').simulate('click', 'using prototype');

expect(spy).toHaveBeenCalled();
});
expect(spy).toHaveBeenCalled();
});
});

describe("#register", () => {
it("should call UserProtocol#register", () => {
it("should call RequestAdapter#send", () => {
let stubUserModel, component;

stubUserModel = new UserModel({ username: "stub-username", password: "stub-password" });

spyOn(UserProtocol, "register");
spyOn(RequestAdapter, "send");

component = new Register();
component.register("stub-username", "stub-password");

expect(UserProtocol.register).toHaveBeenCalledWith(stubUserModel);
expect(RequestAdapter.send).toHaveBeenCalled;
});
});
28 changes: 22 additions & 6 deletions spec/models/user_model_spec.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
import UserModel from "models/user_model";

describe("UserModel", () => {
describe("#constructor", () => {
it("doesn't throw error if argument empty", () => {
expect(UserModel.constructor).not.toThrowError();
});
});

describe("#username", () => {
it("return username", () => {
let model;
Expand All @@ -26,4 +20,26 @@ describe("UserModel", () => {
expect(model.password).toEqual("stub-password");
});
});

describe(".mutationBuild", () => {
it("return json of mutation query", () => {
let model, expectedResult, stubUsername, stubPassword;

stubUsername = "stub-username";
stubPassword = "stub-password";
model = new UserModel({ username: "stub-username", password: "stub-password" }).mutationBuild();
expectedResult = JSON.stringify({
query: "mutation {"+
"addUser("+
"data: { "+
"username:" + '"' + stubUsername + '"' + "," +
"password:" + '"' + stubPassword + '"' +
"}" +
")"+
"}"
});

expect(model).toEqual(expectedResult);
});
});
});
3 changes: 2 additions & 1 deletion webpack.resolve.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ webpackResolve = (
stores: path.resolve(__dirname, "public/stores/"),
supports: path.resolve(__dirname, "public/supports/"),
stylesheets: path.resolve(__dirname, "public/stylesheets/"),
models: path.resolve(__dirname, "public/models/")
models: path.resolve(__dirname, "public/models/"),
app: path.resolve(__dirname, "app/")
}
}
);
Expand Down