| 471 | }; |
| 472 | |
| 473 | function setupServer(done) { |
| 474 | serverApp = loopback({localRegistry: true, loadBuiltinModels: true}); |
| 475 | serverApp.set('remoting', {errorHandler: {debug: true, log: false}}); |
| 476 | serverApp.dataSource('db', {connector: 'memory'}); |
| 477 | |
| 478 | // Setup a custom access-token model that is not shared |
| 479 | // with the client app |
| 480 | const ServerToken = serverApp.registry.createModel('ServerToken', {}, { |
| 481 | base: 'AccessToken', |
| 482 | relations: { |
| 483 | user: { |
| 484 | type: 'belongsTo', |
| 485 | model: 'ServerUser', |
| 486 | foreignKey: 'userId', |
| 487 | }, |
| 488 | }, |
| 489 | }); |
| 490 | serverApp.model(ServerToken, {dataSource: 'db', public: false}); |
| 491 | |
| 492 | ServerUser = serverApp.registry.createModel('ServerUser', USER_PROPS, USER_OPTS); |
| 493 | serverApp.model(ServerUser, { |
| 494 | dataSource: 'db', |
| 495 | public: true, |
| 496 | relations: {accessTokens: {model: 'ServerToken'}}, |
| 497 | }); |
| 498 | |
| 499 | serverApp.enableAuth({dataSource: 'db'}); |
| 500 | |
| 501 | ServerCar = serverApp.registry.createModel('ServerCar', CAR_PROPS, CAR_OPTS); |
| 502 | serverApp.model(ServerCar, {dataSource: 'db', public: true}); |
| 503 | |
| 504 | serverApp.use(function(req, res, next) { |
| 505 | debug(req.method + ' ' + req.path); |
| 506 | |
| 507 | next(); |
| 508 | }); |
| 509 | serverApp.use(loopback.token({model: ServerToken})); |
| 510 | serverApp.use(loopback.rest()); |
| 511 | |
| 512 | serverApp.set('port', 0); |
| 513 | serverApp.set('host', '127.0.0.1'); |
| 514 | serverApp.listen(function() { |
| 515 | serverUrl = serverApp.get('url').replace(/\/+$/, ''); |
| 516 | request = supertest(serverUrl); |
| 517 | |
| 518 | done(); |
| 519 | }); |
| 520 | } |
| 521 | |
| 522 | function setupClient() { |
| 523 | clientApp = loopback({localRegistry: true, loadBuiltinModels: true}); |