@testable import App import Fluent import XCTVapor final class UserTests: XCTestCase { func test1() async throws{ let app = Application(.testing) defer{app.shutdown()} try await configure(app) let basepath = "/api/v2.0/users/" let fn = "Mike" let ln = "Carman" let email = "mcarman@rpmindustries.com" let username = "jrob" let password = "password" let isactive = true let cuserid = -1 let uuserid = -1 //new try app.test(.POST, basepath, beforeRequest: { req in let input = mdlUser(id: nil, number: nil, firstname: fn, lastname: ln, username: username, password: password, email: email, isactive: isactive, createuserid: cuserid, updateuserid: uuserid, divisionid: nil, locationid: nil, gateid: nil) try req.content.encode(input) }, afterResponse: { res in XCTAssertEqual(res.status, .created) let obj = try res.content.decode(mdlUser.self) XCTAssertEqual(obj.firstname, fn) let id = obj.id //Update object just created try app.test(.POST, basepath, beforeRequest:{ req in let input = mdlUser(id: id, number: "1", firstname: fn, lastname: ln, username: username, password: password, email: email, isactive: isactive, createuserid: cuserid, updateuserid: uuserid, divisionid: nil, locationid: nil, gateid: nil) try req.content.encode(input) }, afterResponse: { res in XCTAssertEqual(res.status, .accepted) let obj = try res.content.decode(mdlUser.self) XCTAssertEqual(obj.firstname, fn) }) //All try app.test(.GET, basepath, afterResponse: { res in XCTAssertEqual(res.status, .ok) XCTAssertEqual(res.headers.contentType, .json) _ = try res.content.decode([mdlUser].self) }) //read var parameter = try CustomCrypto.EncryptString(input: String(id!)) var path = "\(basepath)\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .ok) XCTAssertEqual(res.headers.contentType, .json) _ = try res.content.decode(mdlUser.self) }) //login let gooduser = "bryckman" let goodpwd = "password" let baduser = "brycman_" let badpwd = "p@$$w0rd" var combo = "\(gooduser):\(goodpwd)" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .ok) XCTAssertEqual(res.headers.contentType, .json) _ = try res.content.decode(mdlUser.self) }) combo = "\(gooduser):\(badpwd)" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .unauthorized) XCTAssertEqual(res.headers.contentType, .json) }) combo = "\(baduser):\(badpwd)" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .unauthorized) XCTAssertEqual(res.headers.contentType, .json) }) combo = "\(baduser):\(goodpwd)" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .unauthorized) XCTAssertEqual(res.headers.contentType, .json) }) //null values combo = ":\(goodpwd)" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .unauthorized) XCTAssertEqual(res.headers.contentType, .json) }) combo = "\(baduser):" parameter = try CustomCrypto.EncryptString(input: combo) path = "\(basepath)login/\(parameter)" try app.test(.GET, path, afterResponse: { res in XCTAssertEqual(res.status, .unauthorized) XCTAssertEqual(res.headers.contentType, .json) }) //delete user let encryptedid = try CustomCrypto.EncryptString(input: String(id!)) path = "api/v2.0/users/" let url = "\(path)\(encryptedid)" try app.test(.DELETE, url, afterResponse: { res in XCTAssertEqual(res.status, .ok) _ = try res.content.decode(mdlUser.self) }) }) } }