Как написать тест для обновления заявки путем проверки параметров запроса и тела с помощью supertest / superagent? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть PUT / api / admin / tickets, в котором будут строки запроса.

Например: /api/admin/tickets?status=review&email=abcdef@gmail.com.API проверит MongoDB на наличие адреса электронной почты и обновит статус заявки на «разрешение».

Сначала он проверит строку запроса и, если она пуста, будет использовать req.body.status.

Как мне написать тест для него?

Я пробовал и использовал такие вещи, как .query и .send, но безрезультатно.

admin.js

router.put('/tickets', passport.authenticate('jwt', {session: false}), (req, res) => {
    const decoded = jwt_decode(req.headers.authorization)
    console.log("Admin Status: " + decoded.isAdmin)

    if (decoded.isAdmin === false){
        res.sendStatus(403);
        console.log(decoded.isAdmin)
    }

    let query = {
        email: req.query.email,
        "tickets.content": req.body.content,
        "tickets.label" : req.body.label,
        "tickets.status" : req.body.status
    }

    let updated = {
        "tickets.$.status": (!!req.query.status ? req.query.status : req.body.status),
        "tickets.$.label" : (!!req.query.label  ? req.query.label  : req.body.label )
    }
    User.findOneAndUpdate(query, updated).then(posts=> {
        // console.log("Document updated!")
        // console.log(posts)
        res.send(posts)
    }).catch(err => console.log(err))
})

Мокко

   it('Update ticket status, PUT /api/admin/tickets?status=resolved&email=abc@gmail.com', function(done){

        ticketThatNeedsToUpdate = {
            email: "abc@gmail.com",
            // "tickets.status": "new",
            "tickets.content": "I want to have access to the API demo!",
            "tickets.label":"API Demo Services"
        }
        console.log(ticketThatNeedsToUpdate)
        request(app)
        .put('/api/admin/tickets?status=resolved&email=abc@gmail.com')
        .send(ticketThatNeedsToUpdate)
        .query({
            email: 'abc@gmail.com',
            status: 'resolve'
        })
        .set('Authorization', token)
        .expect(200)
        .end((err, res)=> {
            console.log(res.body)
            if (err) return done(err);
            done();
        });

   });

Структура данных в MongoDB

tickets: Array
    0: Object
        status: "new"
        content: "I want to have access to the API demo!"
        status: "API Demo Services"

Этот фрагмент кода формирует строку запроса и проверяет, хочет ли администратор обновить информацию о тикете на основезапрос PUT.

В этом тестовом случае он находит заявку по электронной почте abc@gmail.com и должен обновить статус с «новый» до «разрешен» в MongoDB.

Когда я выполняю тест, console.log (res.body) имеет значение "{}".

...