Skip to content

Commit 068e421

Browse files
Merge pull request #36 from contentstack/feat/dx-958-fetch-asset-by-field-uid
dx | 958 fetch asset by field uid
2 parents 6e5d1b7 + 1dc86b5 commit 068e421

File tree

7 files changed

+144
-83
lines changed

7 files changed

+144
-83
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
## Change log
22

3-
### Version: 4.0.5
3+
### Version: 4.1.0
4+
#### Date: August-08-2024
5+
Feat: fetch asset by any field-uid other that asset-uid
6+
7+
### Version: 4.0.6
48
#### Date: July-30-2024
59
Fix: Live preview endpoint issue
610

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentstack/delivery-sdk",
3-
"version": "4.0.6",
3+
"version": "4.1.0",
44
"type": "commonjs",
55
"main": "./dist/cjs/src/index.js",
66
"types": "./dist/types/src/index.d.ts",

src/lib/asset-query.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BaseQuery } from './base-query';
22
import { AxiosInstance } from '@contentstack/core';
3+
import { Query } from './query';
34

45
export class AssetQuery extends BaseQuery {
56
constructor(client: AxiosInstance) {
@@ -125,4 +126,18 @@ export class AssetQuery extends BaseQuery {
125126

126127
return this;
127128
}
129+
/**
130+
* @method query
131+
* @memberof Query
132+
* @description Fetches the asset data on the basis of the query
133+
* @returns {Query}
134+
* @example
135+
* import contentstack from '@contentstack/delivery-sdk'
136+
*
137+
* const stack = contentstack.Stack({ apiKey: "apiKey", deliveryToken: "deliveryToken", environment: "environment" });
138+
* const result = await stack.asset().query().where('fieldUid', queryOperators, 'value').find();
139+
*/
140+
query() {
141+
return new Query(this._client, this._parameters, this._queryParams);
142+
}
128143
}

src/lib/query.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export class Query extends BaseQuery {
1818
this._parameters = params || {};
1919
this._queryParams = queryParams || {};
2020

21+
if (!uid) {
22+
this._urlPath = `/assets`;
23+
}
2124
if (queryObj) {
2225
this._parameters = { ...this._parameters, ...queryObj };
2326
}

test/api/asset-query.spec.ts

Lines changed: 110 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,129 @@
11
/* eslint-disable no-console */
22
/* eslint-disable promise/always-return */
3-
import { AssetQuery } from '../../src/lib/asset-query';
4-
import { stackInstance } from '../utils/stack-instance';
5-
import { TAssets } from './types';
3+
import { QueryOperation } from "../../src/lib/types";
4+
import { AssetQuery } from "../../src/lib/asset-query";
5+
import { stackInstance } from "../utils/stack-instance";
6+
import { TAsset } from "./types";
67

78
const stack = stackInstance();
89

9-
describe('AssetQuery API tests', () => {
10-
it('should check for assets is defined', async () => {
11-
const result = await makeAssetQuery().find<TAssets>();
12-
expect(result.assets).toBeDefined();
13-
expect(result.assets[0]._version).toEqual(1);
14-
expect(result.assets[0].uid).toBeDefined();
15-
expect(result.assets[0].content_type).toBeDefined();
16-
expect(result.assets[0].created_by).toBeDefined();
17-
expect(result.assets[0].updated_by).toBeDefined();
10+
describe("AssetQuery API tests", () => {
11+
it("should check for assets is defined", async () => {
12+
const result = await makeAssetQuery().find<TAsset>();
13+
if (result.assets) {
14+
expect(result.assets).toBeDefined();
15+
expect(result.assets[0]._version).toBeDefined();
16+
expect(result.assets[0].uid).toBeDefined();
17+
expect(result.assets[0].content_type).toBeDefined();
18+
expect(result.assets[0].created_by).toBeDefined();
19+
expect(result.assets[0].updated_by).toBeDefined();
20+
}
1821
});
19-
it('should check for include dimensions', async () => {
20-
const result = await makeAssetQuery().includeDimension().find<TAssets>();
21-
expect(result.assets[0].dimension).toBeDefined();
22-
expect(result.assets[0]._version).toBeDefined();
23-
expect(result.assets[0].uid).toBeDefined();
24-
expect(result.assets[0].content_type).toBeDefined();
25-
expect(result.assets[0].created_by).toBeDefined();
26-
expect(result.assets[0].updated_by).toBeDefined();
22+
it("should check for include dimensions", async () => {
23+
const result = await makeAssetQuery().includeDimension().find<TAsset>();
24+
if (result.assets) {
25+
expect(result.assets[0].dimension).toBeDefined();
26+
expect(result.assets[0]._version).toBeDefined();
27+
expect(result.assets[0].uid).toBeDefined();
28+
expect(result.assets[0].content_type).toBeDefined();
29+
expect(result.assets[0].created_by).toBeDefined();
30+
expect(result.assets[0].updated_by).toBeDefined();
31+
}
2732
});
28-
it('should check for include fallback', async () => {
29-
const result = await makeAssetQuery().includeFallback().find<TAssets>();
30-
expect(result.assets[0]._version).toBeDefined();
31-
expect(result.assets[0].uid).toBeDefined();
32-
expect(result.assets[0].content_type).toBeDefined();
33-
expect(result.assets[0].created_by).toBeDefined();
34-
expect(result.assets[0].updated_by).toBeDefined();
33+
it("should check for include fallback", async () => {
34+
const result = await makeAssetQuery().includeFallback().find<TAsset>();
35+
if (result.assets) {
36+
expect(result.assets[0]._version).toBeDefined();
37+
expect(result.assets[0].uid).toBeDefined();
38+
expect(result.assets[0].content_type).toBeDefined();
39+
expect(result.assets[0].created_by).toBeDefined();
40+
expect(result.assets[0].updated_by).toBeDefined();
41+
}
3542
});
36-
it('should check for relative urls', async () => {
37-
const result = await makeAssetQuery().relativeUrls().find<TAssets>();
38-
expect(result.assets[0].url).not.toEqual(undefined);
39-
expect(result.assets[0]._version).toBeDefined();
40-
expect(result.assets[0].uid).toBeDefined();
41-
expect(result.assets[0].content_type).toBeDefined();
42-
expect(result.assets[0].created_by).toBeDefined();
43-
expect(result.assets[0].updated_by).toBeDefined();
43+
it("should check for relative urls", async () => {
44+
const result = await makeAssetQuery().relativeUrls().find<TAsset>();
45+
if (result.assets) {
46+
expect(result.assets[0].url).not.toEqual(undefined);
47+
expect(result.assets[0]._version).toBeDefined();
48+
expect(result.assets[0].uid).toBeDefined();
49+
expect(result.assets[0].content_type).toBeDefined();
50+
expect(result.assets[0].created_by).toBeDefined();
51+
expect(result.assets[0].updated_by).toBeDefined();
52+
}
4453
});
45-
it('should check for include branch', async () => {
46-
const result = await makeAssetQuery().includeBranch().find<TAssets>();
47-
expect(result.assets[0]._branch).not.toEqual(undefined);
48-
expect(result.assets[0]._version).toBeDefined();
49-
expect(result.assets[0].uid).toBeDefined();
50-
expect(result.assets[0].content_type).toBeDefined();
51-
expect(result.assets[0].created_by).toBeDefined();
52-
expect(result.assets[0].updated_by).toBeDefined();
54+
it("should check for include branch", async () => {
55+
const result = await makeAssetQuery().includeBranch().find<TAsset>();
56+
if (result.assets) {
57+
expect(result.assets[0]._branch).not.toEqual(undefined);
58+
expect(result.assets[0]._version).toBeDefined();
59+
expect(result.assets[0].uid).toBeDefined();
60+
expect(result.assets[0].content_type).toBeDefined();
61+
expect(result.assets[0].created_by).toBeDefined();
62+
expect(result.assets[0].updated_by).toBeDefined();
63+
}
5364
});
54-
it('should check for include metadata', async () => {
55-
const result = await makeAssetQuery().includeMetadata().find<TAssets>();
56-
expect(result.assets[0]._metadata).not.toEqual(undefined);
57-
expect(result.assets[0]._version).toBeDefined();
58-
expect(result.assets[0].uid).toBeDefined();
59-
expect(result.assets[0].content_type).toBeDefined();
60-
expect(result.assets[0].created_by).toBeDefined();
61-
expect(result.assets[0].updated_by).toBeDefined();
65+
it("should check for include metadata", async () => {
66+
const result = await makeAssetQuery().includeMetadata().find<TAsset>();
67+
if (result.assets) {
68+
expect(result.assets[0]._metadata).not.toEqual(undefined);
69+
expect(result.assets[0]._version).toBeDefined();
70+
expect(result.assets[0].uid).toBeDefined();
71+
expect(result.assets[0].content_type).toBeDefined();
72+
expect(result.assets[0].created_by).toBeDefined();
73+
expect(result.assets[0].updated_by).toBeDefined();
74+
}
6275
});
63-
it('should check for version', async () => {
64-
const result = await makeAssetQuery().version(1).find<TAssets>();
65-
expect(result.assets[0]._version).toEqual(1);
66-
expect(result.assets[0].uid).toBeDefined();
67-
expect(result.assets[0].content_type).toBeDefined();
68-
expect(result.assets[0].created_by).toBeDefined();
69-
expect(result.assets[0].updated_by).toBeDefined();
76+
it("should check for version", async () => {
77+
const result = await makeAssetQuery().version(1).find<TAsset>();
78+
if (result.assets) {
79+
expect(result.assets[0]._version).toEqual(1);
80+
expect(result.assets[0].uid).toBeDefined();
81+
expect(result.assets[0].content_type).toBeDefined();
82+
expect(result.assets[0].created_by).toBeDefined();
83+
expect(result.assets[0].updated_by).toBeDefined();
84+
}
7085
});
71-
it('should check for locale', async () => {
72-
const result = await makeAssetQuery().locale('en-us').find<TAssets>();
73-
expect(result.assets[0]._version).toEqual(1);
74-
expect(result.assets[0].uid).toBeDefined();
75-
expect(result.assets[0].content_type).toBeDefined();
76-
expect(result.assets[0].created_by).toBeDefined();
77-
expect(result.assets[0].updated_by).toBeDefined();
86+
it("should check for locale", async () => {
87+
const result = await makeAssetQuery().locale("en-us").find<TAsset>();
88+
if (result.assets) {
89+
expect(result.assets[0]._version).toBeDefined();
90+
expect(result.assets[0].uid).toBeDefined();
91+
expect(result.assets[0].content_type).toBeDefined();
92+
expect(result.assets[0].created_by).toBeDefined();
93+
expect(result.assets[0].updated_by).toBeDefined();
94+
}
7895
});
79-
it('should check for limit', async () => {
96+
it("should check for limit", async () => {
8097
const query = makeAssetQuery();
81-
const result = await query.limit(2).find<TAssets>();
82-
expect(query._queryParams).toEqual({limit: 2});
83-
expect(result.assets[0].uid).toBeDefined();
84-
expect(result.assets[0].content_type).toBeDefined();
85-
expect(result.assets[0].created_by).toBeDefined();
86-
expect(result.assets[0].updated_by).toBeDefined();
98+
const result = await query.limit(2).find<TAsset>();
99+
if (result.assets) {
100+
expect(query._queryParams).toEqual({ limit: 2 });
101+
expect(result.assets[0].uid).toBeDefined();
102+
expect(result.assets[0].content_type).toBeDefined();
103+
expect(result.assets[0].created_by).toBeDefined();
104+
expect(result.assets[0].updated_by).toBeDefined();
105+
}
87106
});
88-
it('should check for skip', async () => {
107+
it("should check for skip", async () => {
89108
const query = makeAssetQuery();
90-
const result = await query.skip(2).find<TAssets>();
91-
expect(query._queryParams).toEqual({skip: 2});
92-
expect(result.assets[0].uid).toBeDefined();
93-
expect(result.assets[0].content_type).toBeDefined();
94-
expect(result.assets[0].created_by).toBeDefined();
95-
expect(result.assets[0].updated_by).toBeDefined();
109+
const result = await query.skip(2).find<TAsset>();
110+
if (result.assets) {
111+
expect(query._queryParams).toEqual({ skip: 2 });
112+
expect(result.assets[0].uid).toBeDefined();
113+
expect(result.assets[0].content_type).toBeDefined();
114+
expect(result.assets[0].created_by).toBeDefined();
115+
expect(result.assets[0].updated_by).toBeDefined();
116+
}
117+
});
118+
it("should check assets for which title matches", async () => {
119+
const result = await makeAssetQuery().query().where("title", QueryOperation.EQUALS, "AlbertEinstein.jpeg").find<TAsset>();
120+
if (result.assets) {
121+
expect(result.assets[0]._version).toBeDefined();
122+
expect(result.assets[0].uid).toBeDefined();
123+
expect(result.assets[0].content_type).toBeDefined();
124+
expect(result.assets[0].created_by).toBeDefined();
125+
expect(result.assets[0].updated_by).toBeDefined();
126+
}
96127
});
97128
});
98129
function makeAssetQuery(): AssetQuery {

test/unit/asset-query.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { httpClient, AxiosInstance } from '@contentstack/core';
33
import MockAdapter from 'axios-mock-adapter';
44
import { assetQueryFindResponseDataMock } from '../utils/mocks';
55
import { MOCK_CLIENT_OPTIONS } from '../utils/constant';
6+
import { QueryOperation } from '../../src/lib/types';
67

78
describe('AssetQuery class', () => {
89
let assetQuery: AssetQuery;
@@ -58,4 +59,11 @@ describe('AssetQuery class', () => {
5859
const response = await assetQuery.find();
5960
expect(response).toEqual(assetQueryFindResponseDataMock);
6061
});
62+
63+
it('should add "query" in queryParameter when query method is called', async () => {
64+
const returnedValue = await assetQuery.query().where('fieldUid', QueryOperation.EQUALS, 'value')
65+
if (returnedValue) {
66+
expect(returnedValue._parameters).toEqual({ fieldUid: 'value' });
67+
}
68+
});
6169
});

0 commit comments

Comments
 (0)