Skip to content

Commit

Permalink
added component testing to AddUsers.js
Browse files Browse the repository at this point in the history
  • Loading branch information
GavinLynch04 committed Dec 9, 2023
1 parent 3ff566b commit 4d090cf
Show file tree
Hide file tree
Showing 14 changed files with 14,731 additions and 10,605 deletions.
24,932 changes: 14,331 additions & 10,601 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"archiver": "^6.0.1",
"axios": "^1.6.2",
"create-react-app": "^5.0.1",
"enzyme-adapter-react-16": "^1.15.7",
"jsonwebtoken": "^9.0.2",
"jwt-decode": "^4.0.0",
"multer": "^1.4.5-lts.1",
Expand Down
3 changes: 3 additions & 0 deletions packages/backend/.esmrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export default {
extensions: ['.js', '.mjs'],
};
9 changes: 9 additions & 0 deletions packages/backend/babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = function (api) {
api.cache(true);

const presets = ['@babel/preset-env'];

return {
presets,
};
};
5 changes: 4 additions & 1 deletion packages/backend/backend.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,10 @@ app.get('/getPopupData', verifyToken, async (req, res) => {
});

//Port listen definition
app.listen(port, () => {
const server = app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});

export default server;


73 changes: 73 additions & 0 deletions packages/backend/backend.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import request from 'supertest';
import app from './backend.js';

// Mock user data for testing registration and login
const testUser = {
username: 'testuser',
password: 'testpassword',
email: '[email protected]',
};

describe('Backend Tests', () => {
// Test registration endpoint
describe('POST /register', () => {
it('should register a new user', async () => {
const response = await request(app)
.post('/register')
.send(testUser);

expect(response.status).toBe(200);
expect(response.body.message).toBe('User registered successfully');
expect(response.body).toHaveProperty('token');
});

it('should return an error if the email is already registered', async () => {
const response = await request(app)
.post('/register')
.send(testUser);

expect(response.status).toBe(400);
expect(response.body.error).toBe('Email is already registered. Please Login');
});
});

// Test login endpoint
describe('POST /login', () => {
it('should log in an existing user', async () => {
const response = await request(app)
.post('/login')
.send({
email: testUser.email,
password: testUser.password,
});

expect(response.status).toBe(200);
expect(response.body.message).toBe('Login successful');
expect(response.body).toHaveProperty('token');
});

it('should return an error for incorrect password', async () => {
const response = await request(app)
.post('/login')
.send({
email: testUser.email,
password: 'incorrectpassword',
});

expect(response.status).toBe(401);
expect(response.body.error).toBe('Incorrect password.');
});

it('should return an error for a non-existing user', async () => {
const response = await request(app)
.post('/login')
.send({
email: '[email protected]',
password: 'somepassword',
});

expect(response.status).toBe(401);
expect(response.body.error).toBe('User not found, please sign up.');
});
});
});
11 changes: 11 additions & 0 deletions packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,16 @@
"mongoose": "^7.6.3",
"node-stream-zip": "^1.15.0",
"request-promise": "^4.2.6"
},
"jest": {
"transform": {
"^.+\\.js$": "babel-jest"
}
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@babel/preset-env": "^7.23.5",
"babel-jest": "^29.7.0",
"supertest": "^6.3.3"
}
}
199 changes: 199 additions & 0 deletions packages/frontend/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
/**
* For a detailed explanation regarding each configuration property, visit:
* https://jestjs.io/docs/configuration
*/

/** @type {import('jest').Config} */
const config = {
// All imported modules in your tests should be mocked automatically
// automock: false,

// Stop running tests after `n` failures
// bail: 0,

// The directory where Jest should store its cached dependency information
// cacheDirectory: "/private/var/folders/g6/0zwbn3ys1sn1cfb8s33n2nf40000gn/T/jest_dx",

// Automatically clear mock calls, instances, contexts and results before every test
clearMocks: true,

// Indicates whether the coverage information should be collected while executing the test
collectCoverage: true,

// An array of glob patterns indicating a set of files for which coverage information should be collected
// collectCoverageFrom: undefined,

// The directory where Jest should output its coverage files
coverageDirectory: "coverage",

// An array of regexp pattern strings used to skip coverage collection
// coveragePathIgnorePatterns: [
// "/node_modules/"
// ],

// Indicates which provider should be used to instrument code for coverage
// coverageProvider: "babel",

// A list of reporter names that Jest uses when writing coverage reports
// coverageReporters: [
// "json",
// "text",
// "lcov",
// "clover"
// ],

// An object that configures minimum threshold enforcement for coverage results
// coverageThreshold: undefined,

// A path to a custom dependency extractor
// dependencyExtractor: undefined,

// Make calling deprecated APIs throw helpful error messages
// errorOnDeprecated: false,

// The default configuration for fake timers
// fakeTimers: {
// "enableGlobally": false
// },

// Force coverage collection from ignored files using an array of glob patterns
// forceCoverageMatch: [],

// A path to a module which exports an async function that is triggered once before all test suites
// globalSetup: undefined,

// A path to a module which exports an async function that is triggered once after all test suites
// globalTeardown: undefined,

// A set of global variables that need to be available in all test environments
// globals: {},

// The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
// maxWorkers: "50%",

// An array of directory names to be searched recursively up from the requiring module's location
// moduleDirectories: [
// "node_modules"
// ],

// An array of file extensions your modules use
// moduleFileExtensions: [
// "js",
// "mjs",
// "cjs",
// "jsx",
// "ts",
// "tsx",
// "json",
// "node"
// ],

// A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
// moduleNameMapper: {},

// An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
// modulePathIgnorePatterns: [],

// Activates notifications for test results
// notify: false,

// An enum that specifies notification mode. Requires { notify: true }
// notifyMode: "failure-change",

// A preset that is used as a base for Jest's configuration
//preset: 'react-scripts',


// Run tests from one or more projects
// projects: undefined,

// Use this configuration option to add custom reporters to Jest
// reporters: undefined,

// Automatically reset mock state before every test
// resetMocks: false,

// Reset the module registry before running each individual test
// resetModules: false,

// A path to a custom resolver
// resolver: undefined,

// Automatically restore mock state and implementation before every test
// restoreMocks: false,

// The root directory that Jest should scan for tests and modules within
// rootDir: undefined,

// A list of paths to directories that Jest should use to search for files in
// roots: [
// "<rootDir>"
// ],

// Allows you to use a custom runner instead of Jest's default test runner
// runner: "jest-runner",

// The paths to modules that run some code to configure or set up the testing environment before each test
// setupFiles: [],

// A list of paths to modules that run some code to configure or set up the testing framework before each test
// setupFilesAfterEnv: [],

// The number of seconds after which a test is considered as slow and reported as such in the results.
// slowTestThreshold: 5,

// A list of paths to snapshot serializer modules Jest should use for snapshot testing
// snapshotSerializers: [],

// The test environment that will be used for testing
testEnvironment: "jsdom",

// Options that will be passed to the testEnvironment
// testEnvironmentOptions: {},

// Adds a location field to test results
// testLocationInResults: false,

// The glob patterns Jest uses to detect test files
// testMatch: [
// "**/__tests__/**/*.[jt]s?(x)",
// "**/?(*.)+(spec|test).[tj]s?(x)"
// ],

// An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
// testPathIgnorePatterns: [
// "/node_modules/"
// ],

// The regexp pattern or array of patterns that Jest uses to detect test files
// testRegex: [],

// This option allows the use of a custom results processor
// testResultsProcessor: undefined,

// This option allows use of a custom test runner
// testRunner: "jest-circus/runner",

// A map from regular expressions to paths to transformers
// transform: undefined,

// An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
// transformIgnorePatterns: [
// "/node_modules/",
// "\\.pnp\\.[^\\/]+$"
// ],

// An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
// unmockedModulePathPatterns: undefined,

// Indicates whether each individual test should be reported during the run
// verbose: undefined,

// An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
// watchPathIgnorePatterns: [],

// Whether to use watchman for file crawling
// watchman: true,
};

module.exports = config;
26 changes: 23 additions & 3 deletions packages/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"enzyme-adapter-react-16": "^1.15.7",
"lint": "^0.8.19",
"react": "^18.2.0",
"react-dom": "^18.2.0",
Expand All @@ -15,7 +14,7 @@
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"test": "jest",
"eject": "react-scripts eject",
"lint": "eslint --ext=.jsx,.js,.tsx,.ts"
},
Expand All @@ -36,5 +35,26 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.23.5",
"@babel/preset-env": "^7.23.5",
"@babel/preset-react": "^7.23.3",
"@testing-library/jest-dom": "^6.1.5",
"@testing-library/react": "^14.1.2",
"babel-jest": "^29.7.0",
"enzyme": "^3.11.0",
"enzyme-to-json": "^3.6.2",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jsdom": "^23.0.1",
"jsdom-global": "^3.0.2",
"react-test-renderer": "^18.2.0"
},
"babel": {
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
}
1 change: 1 addition & 0 deletions packages/frontend/src/AddUsers.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React, {useState} from "react";
import "./CSS Files/AddUsers.css"
//tests only work when above CSS import is commented out

function InputField({ onInputChange }) {
const [inputValue, setInputValue] = useState('');
Expand Down
Loading

0 comments on commit 4d090cf

Please sign in to comment.