* Changed count to be approximate. Should help with postgres slowness * refactored last commit to only fall back to estimate if no complex query * handlign variables correctly * Trying again because it was casting to lowercase table names which doesnt work for us/ * syntax error * Adding quotations to pg query * hopefully final pg fix * Postgres will now use an approximate count unless there is a more complex query specified * handling edge case * Fix for count being very slow on large Parse Classes' collections in Postgres. Replicating fix for Mongo in issue 5264 * Fixed silly spelling error resulting from copying over notes * Lint fixes * limiting results to 1 on approximation * suppress test that we can no longer run for postgres * removed tests from Postgres that no longer apply * made changes requested by dplewis * fixed count errors * updated package.json * removed test exclude for pg * removed object types from method * test disabled for postgres * returned type * add estimate count test * fix mongo test
314 lines
7.5 KiB
JavaScript
314 lines
7.5 KiB
JavaScript
const auth = require('../lib/Auth');
|
|
const Config = require('../lib/Config');
|
|
const rest = require('../lib/rest');
|
|
const InstallationsRouter = require('../lib/Routers/InstallationsRouter')
|
|
.InstallationsRouter;
|
|
|
|
describe('InstallationsRouter', () => {
|
|
it('uses find condition from request.body', done => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {
|
|
where: {
|
|
deviceType: 'android',
|
|
},
|
|
},
|
|
query: {},
|
|
info: {},
|
|
};
|
|
|
|
const router = new InstallationsRouter();
|
|
rest
|
|
.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
)
|
|
.then(() => {
|
|
return rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
);
|
|
})
|
|
.then(() => {
|
|
return router.handleFind(request);
|
|
})
|
|
.then(res => {
|
|
const results = res.response.results;
|
|
expect(results.length).toEqual(1);
|
|
done();
|
|
})
|
|
.catch(err => {
|
|
fail(JSON.stringify(err));
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('uses find condition from request.query', done => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {},
|
|
query: {
|
|
where: {
|
|
deviceType: 'android',
|
|
},
|
|
},
|
|
info: {},
|
|
};
|
|
|
|
const router = new InstallationsRouter();
|
|
rest
|
|
.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
)
|
|
.then(() => {
|
|
return rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
);
|
|
})
|
|
.then(() => {
|
|
return router.handleFind(request);
|
|
})
|
|
.then(res => {
|
|
const results = res.response.results;
|
|
expect(results.length).toEqual(1);
|
|
done();
|
|
})
|
|
.catch(err => {
|
|
jfail(err);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('query installations with limit = 0', done => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {},
|
|
query: {
|
|
limit: 0,
|
|
},
|
|
info: {},
|
|
};
|
|
|
|
Config.get('test');
|
|
const router = new InstallationsRouter();
|
|
rest
|
|
.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
)
|
|
.then(() => {
|
|
return rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
);
|
|
})
|
|
.then(() => {
|
|
return router.handleFind(request);
|
|
})
|
|
.then(res => {
|
|
const response = res.response;
|
|
expect(response.results.length).toEqual(0);
|
|
done();
|
|
})
|
|
.catch(err => {
|
|
fail(JSON.stringify(err));
|
|
done();
|
|
});
|
|
});
|
|
|
|
it_exclude_dbs(['postgres'])('query installations with count = 1', done => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {},
|
|
query: {
|
|
count: 1,
|
|
},
|
|
info: {},
|
|
};
|
|
|
|
const router = new InstallationsRouter();
|
|
rest
|
|
.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
)
|
|
.then(() =>
|
|
rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
)
|
|
)
|
|
.then(() => router.handleFind(request))
|
|
.then(res => {
|
|
const response = res.response;
|
|
expect(response.results.length).toEqual(2);
|
|
expect(response.count).toEqual(2);
|
|
done();
|
|
})
|
|
.catch(error => {
|
|
fail(JSON.stringify(error));
|
|
done();
|
|
});
|
|
});
|
|
|
|
it_only_db('postgres')('query installations with count = 1', async () => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {},
|
|
query: {
|
|
count: 1,
|
|
},
|
|
info: {},
|
|
};
|
|
|
|
const router = new InstallationsRouter();
|
|
await rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
);
|
|
await rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
);
|
|
let res = await router.handleFind(request);
|
|
let response = res.response;
|
|
expect(response.results.length).toEqual(2);
|
|
expect(response.count).toEqual(0); // estimate count is zero
|
|
|
|
const pgAdapter = config.database.adapter;
|
|
await pgAdapter.updateEstimatedCount('_Installation');
|
|
|
|
res = await router.handleFind(request);
|
|
response = res.response;
|
|
expect(response.results.length).toEqual(2);
|
|
expect(response.count).toEqual(2);
|
|
});
|
|
|
|
it_exclude_dbs(['postgres'])(
|
|
'query installations with limit = 0 and count = 1',
|
|
done => {
|
|
const config = Config.get('test');
|
|
const androidDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abc',
|
|
deviceType: 'android',
|
|
};
|
|
const iosDeviceRequest = {
|
|
installationId: '12345678-abcd-abcd-abcd-123456789abd',
|
|
deviceType: 'ios',
|
|
};
|
|
const request = {
|
|
config: config,
|
|
auth: auth.master(config),
|
|
body: {},
|
|
query: {
|
|
limit: 0,
|
|
count: 1,
|
|
},
|
|
info: {},
|
|
};
|
|
|
|
const router = new InstallationsRouter();
|
|
rest
|
|
.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
androidDeviceRequest
|
|
)
|
|
.then(() => {
|
|
return rest.create(
|
|
config,
|
|
auth.nobody(config),
|
|
'_Installation',
|
|
iosDeviceRequest
|
|
);
|
|
})
|
|
.then(() => {
|
|
return router.handleFind(request);
|
|
})
|
|
.then(res => {
|
|
const response = res.response;
|
|
expect(response.results.length).toEqual(0);
|
|
expect(response.count).toEqual(2);
|
|
done();
|
|
})
|
|
.catch(err => {
|
|
fail(JSON.stringify(err));
|
|
done();
|
|
});
|
|
}
|
|
);
|
|
});
|