Skip to content

Commit 1a2a08e

Browse files
authored
Fixed the way a repository is built from Apisearch (#12)
- Added some tests under Apisearch class
1 parent 68d591e commit 1a2a08e

10 files changed

+157
-50
lines changed

dist/apisearch.js

+33-16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/apisearch.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/apisearch.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/apisearch.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "apisearch",
3-
"version": "0.2.4",
3+
"version": "0.2.5",
44
"description": "Javascript client for Apisearch.",
55
"main": "lib/index.js",
66
"types": "lib/index.d.ts",
@@ -9,7 +9,7 @@
99
"build:dev": "webpack --config ./webpack.dev.js --display-error-details",
1010
"build:min": "webpack --config ./webpack.min.js --display-error-details",
1111
"dist": "npm t; rm -rf ./dist/*; npm run build:dev && npm run build:min",
12-
"test": "mocha --recursive --require ts-node/register test/*/*.ts",
12+
"test": "mocha --recursive --require ts-node/register test/**/*.ts test/*.ts",
1313
"fix": "tslint -c tslint.json --fix 'src/**/*.ts'",
1414
"test:functional": "mocha --recursive --require ts-node/register test/Functional/*/*.ts"
1515
},

src/Apisearch.ts

+46-27
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import {KeyValueCache} from "./Cache/KeyValueCache";
22
import {NoCache} from "./Cache/NoCache";
33
import {AxiosClient} from "./Http/AxiosClient";
4+
import {HttpClient} from "./Http/HttpClient";
45
import {RetryMap} from "./Http/RetryMap";
56
import {Coordinate} from "./Model/Coordinate";
67
import {ItemUUID} from "./Model/ItemUUID";
7-
import {Query} from "./Query/Query";
88
import {QUERY_DEFAULT_PAGE} from "./Query/Query";
99
import {QUERY_DEFAULT_SIZE} from "./Query/Query";
10+
import {Query} from "./Query/Query";
1011
import {SortBy} from "./Query/SortBy";
1112
import {HttpRepository} from "./Repository/HttpRepository";
12-
import {Repository} from "./Repository/Repository";
13-
import {ResultAggregations} from "./Result/ResultAggregations";
1413
import {Result} from "./Result/Result";
14+
import {ResultAggregations} from "./Result/ResultAggregations";
1515
import {Transformer} from "./Transformer/Transformer";
1616

1717
/**
@@ -24,41 +24,48 @@ export default class Apisearch {
2424
*
2525
* @param config
2626
*
27-
* @returns {Repository}
27+
* @return {HttpRepository}
2828
*/
29-
public static createRepository(
30-
config: {
31-
app_id: string,
32-
index_id: string,
33-
token: string,
34-
options: {
35-
endpoint?: string,
36-
api_version?: string,
37-
timeout?: number,
38-
override_queries?: boolean,
39-
cache?: KeyValueCache,
40-
},
41-
}
42-
): Repository {
29+
public static createRepository(config: {
30+
app_id: string,
31+
index_id: string,
32+
token: string,
33+
options: {
34+
endpoint: string,
35+
api_version?: string,
36+
timeout?: number,
37+
override_queries?: boolean,
38+
cache?: KeyValueCache,
39+
http_client?: HttpClient,
40+
},
41+
}): HttpRepository {
42+
43+
Apisearch.ensureIsDefined(config.app_id, "app_id");
44+
Apisearch.ensureIsDefined(config.index_id, "index_id");
45+
Apisearch.ensureIsDefined(config.token, "token");
46+
Apisearch.ensureIsDefined(config.options.endpoint, "options.endpoint");
47+
4348
config.options = {
4449
api_version: "v1",
4550
cache: new NoCache(),
46-
timeout: 10000,
51+
timeout: 5000,
4752
override_queries: true,
4853
...config.options,
4954
};
5055

5156
/**
5257
* Client
5358
*/
54-
const httpClient = new AxiosClient(
55-
config.options.endpoint,
56-
config.options.api_version,
57-
config.options.timeout,
58-
new RetryMap(),
59-
config.options.override_queries,
60-
config.options.cache,
61-
);
59+
const httpClient = typeof config.options.http_client !== "undefined"
60+
? config.options.http_client
61+
: new AxiosClient(
62+
config.options.endpoint,
63+
config.options.api_version,
64+
config.options.timeout,
65+
new RetryMap(),
66+
config.options.override_queries,
67+
config.options.cache,
68+
);
6269

6370
return new HttpRepository(
6471
httpClient,
@@ -69,6 +76,18 @@ export default class Apisearch {
6976
);
7077
}
7178

79+
/**
80+
* Ensure the value is not undefined
81+
*
82+
* @param param
83+
* @param name
84+
*/
85+
public static ensureIsDefined(param, name) {
86+
if (typeof param === "undefined") {
87+
throw new TypeError(`${name} parameter must be defined.`);
88+
}
89+
}
90+
7291
/**
7392
* Created located
7493
*

src/Result/Result.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {Item} from "../Model/Item";
2-
import {ResultAggregation} from "../Result/ResultAggregation";
32
import {Query} from "../Query/Query";
3+
import {ResultAggregation} from "../Result/ResultAggregation";
44
import {ResultAggregations} from "./ResultAggregations";
55
/**
66
* Result class

src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ export * from "./Result/Result";
5050

5151
export * from "./Transformer/ReadTransformer";
5252
export * from "./Transformer/Transformer";
53-
export * from "./Transformer/WriteTransformer";
53+
export * from "./Transformer/WriteTransformer";

test/Apisearch.test.ts

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { expect } from 'chai';
2+
import Apisearch from "../src/Apisearch";
3+
import {Product} from "./Transformer/Product";
4+
import {Item} from "../src/Model/Item";
5+
import {ItemUUID} from "../src/Model/ItemUUID";
6+
import {Changes} from "../src/Model/Changes";
7+
import {Query} from "../src/Query/Query";
8+
import {ImmutableConfig} from "../src/Config/ImmutableConfig";
9+
import {Config} from "../src/Config/Config";
10+
import {TestClient} from "../src/Http/TestClient";
11+
import {ProductReadTransformer} from "./Transformer/ProductReadTransformer";
12+
13+
describe('Apisearch', () => {
14+
15+
const client = new TestClient();
16+
const repository = Apisearch.createRepository({
17+
"app_id": "aaaa",
18+
"index_id": 'bbbb',
19+
"token": 'cccc',
20+
"options": {
21+
"endpoint": 'http://blabla',
22+
"http_client": client,
23+
}
24+
});
25+
repository.getTransformer().addReadTransformer(new ProductReadTransformer());
26+
27+
describe('Initial build', () => {
28+
it('Should create properly', () => {
29+
expect(typeof repository.getTransformer()).to.be.equal("object");
30+
});
31+
});
32+
33+
describe('Calls will work properly', () => {
34+
repository.addObject(new Product('1', '1', 'name'));
35+
repository.addObject(new Product('2', '2', 'name'));
36+
repository.addItem(Item.create(ItemUUID.createByComposedUUID('3~product')));
37+
repository.addItems([
38+
Item.create(ItemUUID.createByComposedUUID('4~product')),
39+
Item.create(ItemUUID.createByComposedUUID('5~product'))
40+
]);
41+
repository.deleteItem(ItemUUID.createByComposedUUID('6~product'));
42+
repository.deleteItems([
43+
ItemUUID.createByComposedUUID('7~product'),
44+
ItemUUID.createByComposedUUID('8~product')
45+
]);
46+
repository.deleteObject(new Product('9', 'lalala', 'prod4'));
47+
repository.deleteObject(new Product('10', 'lalala', 'prod5'));
48+
49+
it('Should take properly all available repository calls', () => {
50+
return Promise.all([
51+
repository.flush(100, true),
52+
repository.flush(3),
53+
repository.query(Query.createMatchAll()),
54+
repository.updateItems(Query.createMatchAll(), Changes.create()),
55+
repository.createIndex(new ImmutableConfig()),
56+
repository.deleteIndex(),
57+
repository.resetIndex(),
58+
repository.checkIndex(),
59+
repository.configureIndex(new Config())
60+
]).then(() => {
61+
expect(client.calls.length).to.be.equal(9);
62+
})
63+
});
64+
});
65+
});

test/Repository/HttpRepository.test.ts

+6
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ describe('Repository/', () => {
9292
Item.create(ItemUUID.createByComposedUUID('6~product')),
9393
]);
9494

95+
await repository
96+
.flush(20, true)
97+
.then(_ => {
98+
expect(client.calls.length).to.be.equal(0);
99+
});
100+
95101
await repository
96102
.flush(2)
97103
.then(_ => {

0 commit comments

Comments
 (0)