From fc2096a992909b5f6725fa257c8fbb18f9b6349f Mon Sep 17 00:00:00 2001 From: Sebastian Mihalache <sebi.mihalache@gmail.com> Date: Thu, 22 Nov 2018 11:53:57 +0200 Subject: [PATCH] feat(user-graphql): build component structure --- packages/component-user/index.js | 10 ++ .../component-user/migrations/001-user.sql | 6 + packages/component-user/resolvers.js | 0 packages/component-user/typeDefs.js | 13 ++ packages/component-user/user.js | 0 .../graphql/LoginContainer.test.jsx | 144 ------------------ packages/xpub-faraday/config/default.js | 4 + 7 files changed, 33 insertions(+), 144 deletions(-) create mode 100644 packages/component-user/index.js create mode 100644 packages/component-user/migrations/001-user.sql create mode 100644 packages/component-user/resolvers.js create mode 100644 packages/component-user/typeDefs.js create mode 100644 packages/component-user/user.js delete mode 100644 packages/pubsweet-component-login/graphql/LoginContainer.test.jsx diff --git a/packages/component-user/index.js b/packages/component-user/index.js new file mode 100644 index 000000000..307f862c0 --- /dev/null +++ b/packages/component-user/index.js @@ -0,0 +1,10 @@ +const resolvers = require('./resolvers') +const typeDefs = require('./typeDefs') +const model = require('./user') + +module.exports = { + model, + modelName: 'User', + resolvers, + typeDefs, +} diff --git a/packages/component-user/migrations/001-user.sql b/packages/component-user/migrations/001-user.sql new file mode 100644 index 000000000..36c7a4ed5 --- /dev/null +++ b/packages/component-user/migrations/001-user.sql @@ -0,0 +1,6 @@ +CREATE TABLE "user" ( + id UUID PRIMARY KEY, + created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT current_timestamp, + updated TIMESTAMP WITH TIME ZONE, + default_identity TEXT +); \ No newline at end of file diff --git a/packages/component-user/resolvers.js b/packages/component-user/resolvers.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/component-user/typeDefs.js b/packages/component-user/typeDefs.js new file mode 100644 index 000000000..6247dc4a4 --- /dev/null +++ b/packages/component-user/typeDefs.js @@ -0,0 +1,13 @@ +const typeDefs = ` + extend type Query { + users: [User] + } + + extend type Mutation { + confirmUser(input: confirmUserInput): User! + } + + +` + +module.exports = typeDefs diff --git a/packages/component-user/user.js b/packages/component-user/user.js new file mode 100644 index 000000000..e69de29bb diff --git a/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx b/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx deleted file mode 100644 index 7df5518ba..000000000 --- a/packages/pubsweet-component-login/graphql/LoginContainer.test.jsx +++ /dev/null @@ -1,144 +0,0 @@ -import React from 'react' -import { mount } from 'enzyme' -import { MockedProvider } from 'react-apollo/test-utils' -import { ThemeProvider } from 'styled-components' -import { MemoryRouter, Route } from 'react-router-dom' - -import wait from 'waait' -import { LOGIN_USER } from './mutations' -import LoginContainer from './LoginContainer' - -const user1 = { - id: 'user1', - username: 'admin', - password: 'adminadmin', - admin: true, - teams: [], -} - -const mocks = currentUser => [ - { - request: { - query: LOGIN_USER, - variables: { - input: { - username: currentUser.username, - password: currentUser.password, - }, - }, - }, - result: { - data: { - loginUser: { - user: currentUser, - token: 'greatToken', - }, - }, - }, - }, - { - request: { - query: LOGIN_USER, - variables: { - input: { - username: currentUser.username, - password: 'wrongPassword', - }, - }, - }, - result: { - data: { loginUser: null }, - errors: [{ message: 'Wrong username or password.' }], - }, - }, -] - -let globalLocation - -function makeDeepWrapper(currentUser, props = {}) { - // A theme is needed because some components use colors - // specified in the theme to render themselves (e.g. Link) - const theme = { - colorPrimary: '#fff', - colorSecondary: '#fff', - } - - return mount( - <ThemeProvider theme={theme}> - <MockedProvider addTypename={false} mocks={mocks(currentUser)}> - <MemoryRouter initialEntries={['/login']}> - <Route - {...props} - render={p => { - globalLocation = p.location - return <LoginContainer {...p} /> - }} - /> - </MemoryRouter> - </MockedProvider> - </ThemeProvider>, - ) -} - -describe('LoginContainer', () => { - beforeEach(() => { - window.localStorage.clear() - globalLocation = undefined - }) - - it('renders the login form', () => { - const wrapper = makeDeepWrapper(user1) - wrapper.update() - - const fields = wrapper.find('Login') - expect(fields).toHaveLength(1) - }) - - it('submits login information and logs the user in', async () => { - const wrapper = makeDeepWrapper(user1) - wrapper.update() - - const usernameField = wrapper.find('TextField[label="Username"] input') - usernameField.getDOMNode().value = user1.username - usernameField.simulate('change') - const passwordField = wrapper.find('TextField[label="Password"] input') - passwordField.getDOMNode().value = user1.password - passwordField.simulate('change') - - wrapper.update() - const button = wrapper.find('button') - button.simulate('submit') - - wrapper.update() - await wait(50) - - expect(window.localStorage.token).toEqual('greatToken') - expect(globalLocation.pathname).toEqual('/testRedirect') - }) - - it('does not log in user with incorrect credentials', async () => { - const wrapper = makeDeepWrapper(user1) - wrapper.update() - - const usernameField = wrapper.find('TextField[label="Username"] input') - usernameField.getDOMNode().value = user1.username - usernameField.simulate('change') - const passwordField = wrapper.find('TextField[label="Password"] input') - passwordField.getDOMNode().value = 'wrongPassword' - passwordField.simulate('change') - - wrapper.update() - const button = wrapper.find('button') - - button.simulate('submit') - - wrapper.update() - await wait(50) - - expect(wrapper.find('Login').text()).toContain( - 'Wrong username or password.', - ) - expect(window.localStorage.token).toEqual(undefined) - expect(globalLocation.pathname).toEqual('/login') - }) -}) diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js index 4ac021c51..a410fa43e 100644 --- a/packages/xpub-faraday/config/default.js +++ b/packages/xpub-faraday/config/default.js @@ -44,6 +44,10 @@ module.exports = { logger, uploads: 'uploads', secret: 'SECRET', + enableExperimentalGraphql: true, + graphiql: true, + // typeDefs: authors.typeDefs, + // resolvers, }, 'pubsweet-client': { API_ENDPOINT: '/api', -- GitLab