Commit 6616d4ab authored by Elena Tsoy's avatar Elena Tsoy

#84 тестирование api-rooms и изменения в тестах api-payments

parent 4cda52f6
Pipeline #343 canceled with stages
in 13 minutes and 47 seconds
...@@ -6,7 +6,7 @@ const news = require('./app/news'); ...@@ -6,7 +6,7 @@ const news = require('./app/news');
const calendarEvents = require('./app/calendarEvent'); const calendarEvents = require('./app/calendarEvent');
const contentlinks = require('./app/contentlinks'); const contentlinks = require('./app/contentlinks');
const cors = require('cors'); const cors = require('cors');
const rooms = require('./app/room') const rooms = require('./app/rooms')
const bigBrother = require('./app/bigBrother') const bigBrother = require('./app/bigBrother')
const app = express(); const app = express();
......
...@@ -3,6 +3,7 @@ const mongoose = require ('mongoose') ...@@ -3,6 +3,7 @@ const mongoose = require ('mongoose')
const config = require ('../config') const config = require ('../config')
const {app, port} = require('../../app.js') const {app, port} = require('../../app.js')
const Payment = require('../models/Payment') const Payment = require('../models/Payment')
const User = require('../models/User')
describe ('route-payments', () => { describe ('route-payments', () => {
const server = app.listen(port) const server = app.listen(port)
...@@ -39,10 +40,15 @@ describe ('route-payments', () => { ...@@ -39,10 +40,15 @@ describe ('route-payments', () => {
} }
}) })
afterAll(async(done) => { afterAll(async(done) => {
try {
await Payment.findByIdAndDelete(payment._id) await Payment.findByIdAndDelete(payment._id)
await mongoose.connection.close() await mongoose.connection.close()
server.close() server.close()
done() done()
}catch(e){
console.log(e)
done();
}
}) })
test ('Get payments list', async () => { test ('Get payments list', async () => {
...@@ -59,7 +65,7 @@ describe ('route-payments', () => { ...@@ -59,7 +65,7 @@ describe ('route-payments', () => {
const newPayment = { const newPayment = {
user: user.body.user, user: user.body.user,
paided: false, paided: false,
approved: false, approved: true,
repeatability: false, repeatability: false,
purpose: 'за товар', purpose: 'за товар',
payer: 'Froot_Middle_Asia', payer: 'Froot_Middle_Asia',
...@@ -102,23 +108,6 @@ describe ('route-payments', () => { ...@@ -102,23 +108,6 @@ describe ('route-payments', () => {
expect(res.statusCode).toBe(200) expect(res.statusCode).toBe(200)
expect(res.body.approved).toBe(false) expect(res.body.approved).toBe(false)
}) })
test ('Paid payment', async () => {
const res = await request(server).get('/payments/'+ payment._id +'/paid').set({'Authorization': token})
if(payment.approved){
expect(res.statusCode).toBe(200)
expect(res.body.paided).toBe(true)
}else {
expect(res.statusCode).toBe(403)
expect(res.body.message).toBe('Требуется одобрение директора')
}
})
test ('Cancel paid payment', async () => {
const res = await request(server).get('/payments/'+ payment._id +'/paid/cancel').set({'Authorization': token})
expect(res.statusCode).toBe(200)
expect(res.body.paided).toBe(false)
})
test ('Edit payment', async () => { test ('Edit payment', async () => {
const editData = { const editData = {
payer: 'Froot_Бизнес', payer: 'Froot_Бизнес',
...@@ -134,11 +123,6 @@ describe ('route-payments', () => { ...@@ -134,11 +123,6 @@ describe ('route-payments', () => {
const res = await request(server).get('/payments/due/today').set({'Authorization': token}) const res = await request(server).get('/payments/due/today').set({'Authorization': token})
expect(res.statusCode).toBe(200) expect(res.statusCode).toBe(200)
}) })
test ('Get all files of payments for today', async () => {
const res = await request(server).get('/payments/files/today').set({'Authorization': token})
expect(res.statusCode).toBe(200)
expect(Array.isArray(res.body)).toBe(true)
})
test ('Stoped repeatability payment', async () => { test ('Stoped repeatability payment', async () => {
const res = await request(server).post('/payments/'+ payment._id +'/not-repeatability').set({'Authorization': token}) const res = await request(server).post('/payments/'+ payment._id +'/not-repeatability').set({'Authorization': token})
expect(res.statusCode).toBe(200) expect(res.statusCode).toBe(200)
...@@ -146,5 +130,63 @@ describe ('route-payments', () => { ...@@ -146,5 +130,63 @@ describe ('route-payments', () => {
expect(res.body.paided).toBe(false) expect(res.body.paided).toBe(false)
} }
}) })
describe ('route-payments/role-payPayment', ()=> {
let accountant
let accountantToken
let accountantUser
beforeAll (async (done) => {
try {
accountantUser = await User.create ({
workEmail: 'accountant@accountant.com',
surname: 'Accountant',
name: 'Accountant',
patronymic: 'Accountant',
position: 'accountant',
telegramName: '@accountant',
role: ['viewAllPayments', 'stopRepeatabilityPayment', 'addPayment', 'editPayment', 'payPayment', 'viewToBePaid', 'viewTodayPayments', 'cancelPayedPayment', 'bookMeetingRoom', 'editBookedMeetingRoom', 'deleteBookedMeetingRoom', 'viewBookingsMeetingRoom'],
phone: '+7 777 777 77 77',
password: '12345a'
})
const accountantData = {
workEmail: 'accountant@accountant.com',
password: '12345a'
}
accountant = await request(server).post('/users/sessions').send(accountantData);
accountantToken = accountant.body.user.token[0]
done();
}catch(e){
console.log(e)
done();
}
})
afterAll (async (done) => {
try {
await User.findByIdAndDelete(accountantUser._id)
done()
}catch(e){
console.log(e)
done();
}
})
test ('Paid payment', async () => {
const res = await request(server).get('/payments/'+ payment._id +'/paid').set({'Authorization': accountantToken})
if(payment.approved){
expect(res.statusCode).toBe(200)
expect(res.body.paided).toBe(true)
}else {
expect(res.statusCode).toBe(403)
expect(res.body.message).toBe('Требуется одобрение директора')
}
})
test ('Cancel paid payment', async () => {
const res = await request(server).get('/payments/'+ payment._id +'/paid/cancel').set({'Authorization': accountantToken})
expect(res.statusCode).toBe(200)
expect(res.body.paided).toBe(false)
})
test ('Get all files of payments for today', async () => {
const res = await request(server).get('/payments/files/today').set({'Authorization': accountantToken})
expect(res.statusCode).toBe(200)
expect(Array.isArray(res.body)).toBe(true)
})
})
}) })
\ No newline at end of file
const request = require ('supertest')
const mongoose = require ('mongoose')
const config = require ('../config')
const {app, port} = require('../../app.js')
const Room = require ('../models/Room')
describe ('route-rooms', () => {
const server = app.listen(port)
beforeAll (async (done) => {
try {
await mongoose.connect(config.db.url + '/' + config.db.name, { useNewUrlParser: true, useUnifiedTopology: true });
done();
}catch(e){
console.log(e)
done();
}
})
afterAll(async(done) => {
try {
await mongoose.connection.close()
server.close()
done()
}catch(e){
console.log(e)
done();
}
})
test ('Create new room', async () => {
const newRoom = {
room: 'test room'
}
const res = await request(server).post('/rooms').send(newRoom)
expect(res.statusCode).toBe(200)
expect(res.body.room).toBe('test room')
await Room.findByIdAndDelete(res.body._id)
})
test ('Get rooms list', async () => {
const res = await request(server).get('/rooms')
expect(res.statusCode).toBe(200)
})
test ('Delete room by id', async () => {
const deleteRoom = await Room.create ({
room: 'room to be deleted'
})
const res = await request(server).delete('/rooms/'+ deleteRoom._id)
expect(res.statusCode).toBe(200)
expect(res.body.message).toBe('Success')
})
})
\ No newline at end of file
...@@ -10,7 +10,6 @@ let host = process.env.MONGO_HOST ...@@ -10,7 +10,6 @@ let host = process.env.MONGO_HOST
let dbMongo = process.env.MONGO_DB let dbMongo = process.env.MONGO_DB
let port = process.env.MONGO_PORT let port = process.env.MONGO_PORT
let initDb = process.env.MONGO_INITDB; let initDb = process.env.MONGO_INITDB;
module.exports = { module.exports = {
rootPath, rootPath,
uploadPath: path.join(rootPath, '../public/uploads'), uploadPath: path.join(rootPath, '../public/uploads'),
...@@ -19,6 +18,7 @@ module.exports = { ...@@ -19,6 +18,7 @@ module.exports = {
// name: 'test', // name: 'test',
// name:`${dbMongo}?authSource=${initDb}`, //docker // name:`${dbMongo}?authSource=${initDb}`, //docker
name: process.env.MONGO_DB ? `${dbMongo}?authSource=${initDb}` : 'froot', name: process.env.MONGO_DB ? `${dbMongo}?authSource=${initDb}` : 'froot',
// url: 'mongodb://localhost', // url: 'mongodb://localhost',
// url: 'mongodb+srv://QWE123:QWE123@cluster0.rrd3k.mongodb.net', // Pasha's mongo address !! // url: 'mongodb+srv://QWE123:QWE123@cluster0.rrd3k.mongodb.net', // Pasha's mongo address !!
// url:`mongodb://${user}:${password}@${host}:${port}`, //docker // url:`mongodb://${user}:${password}@${host}:${port}`, //docker
......
...@@ -2,7 +2,6 @@ const User = require("../models/User"); ...@@ -2,7 +2,6 @@ const User = require("../models/User");
const auth = async (req,res,next) => { const auth = async (req,res,next) => {
const token = req.get('Authorization'); const token = req.get('Authorization');
// console.log('AUTH TOKEN*************** ', token)
if(!token) { if(!token) {
// console.log('AUTH TOKEN FIRST IF TOKEN ERROR*************** ', token) // console.log('AUTH TOKEN FIRST IF TOKEN ERROR*************** ', token)
return res.status(401).send({error: 'No token present'}); return res.status(401).send({error: 'No token present'});
......
const permit = (...roles) => { const permit = (...roles) => {
return (req, res, next) => {
return (req, res, next) => {
if (!req.user) { if (!req.user) {
return res.status(401).send({ 'message': 'Unauthenticated' }) return res.status(401).send({ 'message': 'Unauthenticated' })
} }
......
...@@ -22,7 +22,6 @@ schedule.scheduleJob("16 21 * * *", async function(){ ...@@ -22,7 +22,6 @@ schedule.scheduleJob("16 21 * * *", async function(){
console.log(e) console.log(e)
} }
}); });
const createRouter = () => { const createRouter = () => {
router.get('/', auth, async (req, res) => { router.get('/', auth, async (req, res) => {
...@@ -176,6 +175,7 @@ const createRouter = () => { ...@@ -176,6 +175,7 @@ const createRouter = () => {
}; };
try { try {
const payments = await Payment.find(filter).populate('user', 'surname name workEmail'); const payments = await Payment.find(filter).populate('user', 'surname name workEmail');
await helpers.checkRepeatability(payments) await helpers.checkRepeatability(payments)
await helpers.buildExcelFile(payments) await helpers.buildExcelFile(payments)
res.send(payments); res.send(payments);
...@@ -193,8 +193,9 @@ const createRouter = () => { ...@@ -193,8 +193,9 @@ const createRouter = () => {
}; };
try { try {
const payments = await Payment.find(filter).populate('user', 'surname name workEmail'); const payments = await Payment.find(filter).populate('user', 'surname name workEmail');
let files = [] let files = []
payments.map(p=>{ payments && payments.map(p=>{
if(p.image){ if(p.image){
files.push(p.image) files.push(p.image)
} }
......
...@@ -5,6 +5,7 @@ const router = express.Router(); ...@@ -5,6 +5,7 @@ const router = express.Router();
const User = require('./models/User'); const User = require('./models/User');
const createRouter = () => { const createRouter = () => {
router.get('/', router.get('/',
[auth, permit('viewUsers')], [auth, permit('viewUsers')],
async (req, res) => { async (req, res) => {
......
...@@ -4,7 +4,6 @@ const User = require('./app/models/User'); ...@@ -4,7 +4,6 @@ const User = require('./app/models/User');
const { app, port } = require('./app'); const { app, port } = require('./app');
const run = async () => { const run = async () => {
if (process.env.NODE_ENV !== 'test') { ///// !!!чтобы отрабатывала тестовая среда - перенес сюда коннект к монго и слежение порта if (process.env.NODE_ENV !== 'test') { ///// !!!чтобы отрабатывала тестовая среда - перенес сюда коннект к монго и слежение порта
await mongoose.connect(config.db.url + '/' + config.db.name, { useNewUrlParser: true, useUnifiedTopology: true }); await mongoose.connect(config.db.url + '/' + config.db.name, { useNewUrlParser: true, useUnifiedTopology: true });
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"seed": "node fixtures.js", "seed": "node fixtures.js",
"test": "mocha", "test": "mocha",
"start": "node index.js", "start": "node index.js",
"test:jest": "NODE_ENV=test jest --detectOpenHandles --maxWorkers=1 --forceExit" "test:jest": "NODE_ENV=test jest --detectOpenHandles --watch --maxWorkers=1 --forceExit"
}, },
"jest": { "jest": {
"bail": true, "bail": true,
......
...@@ -21,7 +21,7 @@ const Header = ({ user }) => { ...@@ -21,7 +21,7 @@ const Header = ({ user }) => {
},[]); },[]);
useEffect(()=>{ useEffect(()=>{
if(windowWidth>1500){ if(windowWidth>1200){
setState({menuShow:true,accauntShow:true}); setState({menuShow:true,accauntShow:true});
} }
},[windowWidth]) },[windowWidth])
...@@ -62,7 +62,7 @@ const Header = ({ user }) => { ...@@ -62,7 +62,7 @@ const Header = ({ user }) => {
<NavLink to="/"> <NavLink to="/">
<img src={logo} alt="logo" /> <img src={logo} alt="logo" />
</NavLink> </NavLink>
<button className={windowWidth>1500? 'Header__menu--none':"UserMenu__btn Header__burger"} onClick={menuClick}>Menu</button> <button className={windowWidth>1200? 'Header__menu--none':"UserMenu__btn Header__burger"} onClick={menuClick}>Menu</button>
<menu className={classNameOfMenu}> <menu className={classNameOfMenu}>
{user && user.role.includes("viewAllPayments") && ( {user && user.role.includes("viewAllPayments") && (
<Fragment> <Fragment>
...@@ -95,7 +95,6 @@ const Header = ({ user }) => { ...@@ -95,7 +95,6 @@ const Header = ({ user }) => {
</NavLink> </NavLink>
</MenuItem> </MenuItem>
)} )}
{console.log(user.role)}
{user.role.includes("viewAllPayments") && ( {user.role.includes("viewAllPayments") && (
<MenuItem> <MenuItem>
...@@ -154,7 +153,7 @@ const Header = ({ user }) => { ...@@ -154,7 +153,7 @@ const Header = ({ user }) => {
)} )}
</menu> </menu>
<button className={windowWidth>1500? 'Header__menu--none':"UserMenu__btn Header__burger"} onClick={accauntClick}>Профиль</button> <button className={windowWidth>1200? 'Header__menu--none':"UserMenu__btn Header__burger"} onClick={accauntClick}>Профиль</button>
<div className={classNameOfAccaunt}>{user ? <UserMenu user={user} /> : <AnonymousMenu />}</div> <div className={classNameOfAccaunt}>{user ? <UserMenu user={user} /> : <AnonymousMenu />}</div>
</div> </div>
); );
......
// export const apiURL = "http://localhost:8000"; export const apiURL = "http://localhost:8000";
export const apiURL = "http://162.55.54.115:8000"; // export const apiURL = "http://162.55.54.115:8000";
const allDayLocalizationMessages = { const allDayLocalizationMessages = {
"ru-RU": { "ru-RU": {
......
...@@ -169,7 +169,7 @@ const Payments = () => { ...@@ -169,7 +169,7 @@ const Payments = () => {
return ( return (
<Fragment> <Fragment>
{user && payments.length? <div className="Payments"> {user && <div className="Payments">
{user.role.includes('viewAllPayments') ? ( {user.role.includes('viewAllPayments') ? (
<Fragment> <Fragment>
<div className="Payments__content"> <div className="Payments__content">
...@@ -188,7 +188,7 @@ const Payments = () => { ...@@ -188,7 +188,7 @@ const Payments = () => {
</Fragment> </Fragment>
): <UsersPermission/>} ): <UsersPermission/>}
</div> : <RedirectToAuth/>} </div> }
</Fragment> </Fragment>
); );
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment