musora-content-services 1.0.208 → 1.0.209
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/package.json +1 -1
- package/src/filterBuilder.js +5 -3
- package/test/sanityQueryService.test.js +13 -16
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [1.0.209](https://github.com/railroadmedia/musora-content-services/compare/v1.0.208...v1.0.209) (2024-12-02)
|
|
6
|
+
|
|
5
7
|
### [1.0.208](https://github.com/railroadmedia/musora-content-services/compare/v1.0.207...v1.0.208) (2024-12-02)
|
|
6
8
|
|
|
7
9
|
### [1.0.207](https://github.com/railroadmedia/musora-content-services/compare/v1.0.198...v1.0.207) (2024-12-02)
|
package/package.json
CHANGED
package/src/filterBuilder.js
CHANGED
|
@@ -61,10 +61,12 @@ export class FilterBuilder {
|
|
|
61
61
|
if (this.availableContentStatuses.length === 0) {
|
|
62
62
|
if (this.userData.isAdmin) {
|
|
63
63
|
this.availableContentStatuses = [this.STATUS_DRAFT, this.STATUS_SCHEDULED, this.STATUS_PUBLISHED, this.STATUS_ARCHIVED, this.STATUS_UNLISTED];
|
|
64
|
+
this.getFutureScheduledContentsOnly = true;
|
|
64
65
|
} else if(this.isSingle){
|
|
65
66
|
this.availableContentStatuses = [this.STATUS_SCHEDULED, this.STATUS_PUBLISHED, this.STATUS_UNLISTED, this.STATUS_ARCHIVED];
|
|
66
67
|
} else{
|
|
67
68
|
this.availableContentStatuses = [this.STATUS_SCHEDULED, this.STATUS_PUBLISHED];
|
|
69
|
+
this.getFutureScheduledContentsOnly = true;
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
|
|
@@ -74,8 +76,8 @@ export class FilterBuilder {
|
|
|
74
76
|
this.pullFutureContent = true;
|
|
75
77
|
const now = new Date().toISOString();
|
|
76
78
|
let statuses = [...this.availableContentStatuses];
|
|
77
|
-
statuses.splice(statuses.indexOf(this.STATUS_SCHEDULED));
|
|
78
|
-
this._andWhere(`(status in ${arrayToStringRepresentation(statuses)} || (status == '${this.STATUS_SCHEDULED}' && published_on >= '${now}'))`)
|
|
79
|
+
statuses.splice(statuses.indexOf(this.STATUS_SCHEDULED), 1);
|
|
80
|
+
this._andWhere(`(status in ${arrayToStringRepresentation(statuses)} || (status == '${this.STATUS_SCHEDULED}' && defined(published_on) && published_on >= '${now}'))`)
|
|
79
81
|
|
|
80
82
|
} else {
|
|
81
83
|
this._andWhere(`status in ${arrayToStringRepresentation(this.availableContentStatuses)}`);
|
|
@@ -145,4 +147,4 @@ export function arrayToStringRepresentation(arr) {
|
|
|
145
147
|
|
|
146
148
|
export function arrayToRawRepresentation(arr) {
|
|
147
149
|
return '[' + arr.map(item => `${item}`).join(',') + ']';
|
|
148
|
-
}
|
|
150
|
+
}
|
|
@@ -683,16 +683,16 @@ describe('Filter Builder', function () {
|
|
|
683
683
|
let finalFilter = await builder.buildFilter(filter);
|
|
684
684
|
let clauses = spliceFilterForAnds(finalFilter);
|
|
685
685
|
expect(clauses[0].phrase).toBe(filter);
|
|
686
|
-
expect(clauses[1].field).toBe('status');
|
|
687
|
-
expect(clauses[
|
|
686
|
+
expect(clauses[1].field).toBe('(status');
|
|
687
|
+
expect(clauses[3].field).toBe('published_on');
|
|
688
688
|
|
|
689
689
|
builder = new FilterBuilder('', {bypassPermissions: true});
|
|
690
690
|
finalFilter = await builder.buildFilter(filter);
|
|
691
691
|
clauses = spliceFilterForAnds(finalFilter);
|
|
692
|
-
expect(clauses[0].field).toBe('status');
|
|
692
|
+
expect(clauses[0].field).toBe('(status');
|
|
693
693
|
expect(clauses[0].operator).toBe('in');
|
|
694
|
-
expect(clauses[
|
|
695
|
-
expect(clauses[
|
|
694
|
+
expect(clauses[2].field).toBe('published_on');
|
|
695
|
+
expect(clauses[2].operator).toBe('>=');
|
|
696
696
|
});
|
|
697
697
|
|
|
698
698
|
test('withOnlyFilterAvailableStatuses', async () => {
|
|
@@ -720,7 +720,7 @@ describe('Filter Builder', function () {
|
|
|
720
720
|
expect(clauses[1].field).toBe('(status'); // extra ( because it's a multi part filter
|
|
721
721
|
expect(clauses[1].operator).toBe('in');
|
|
722
722
|
// getFutureScheduledContentsOnly doesn't make a filter that's splicable, so we match on the more static string
|
|
723
|
-
const expected = "['published','unlisted'] || (status == 'scheduled' && published_on >=";
|
|
723
|
+
const expected = "['published','unlisted'] || (status == 'scheduled' && defined(published_on) && published_on >=";
|
|
724
724
|
const isMatch = finalFilter.includes(expected);
|
|
725
725
|
expect(isMatch).toBeTruthy();
|
|
726
726
|
});
|
|
@@ -756,8 +756,8 @@ describe('Filter Builder', function () {
|
|
|
756
756
|
expect(isMatch).toBeFalsy();
|
|
757
757
|
const clauses = spliceFilterForAnds(finalFilter);
|
|
758
758
|
expect(clauses[0].field).toBe('railcontent_id');
|
|
759
|
-
expect(clauses[1].field).toBe('status');
|
|
760
|
-
expect(clauses[
|
|
759
|
+
expect(clauses[1].field).toBe('(status');
|
|
760
|
+
expect(clauses[3].field).toBe('published_on');
|
|
761
761
|
|
|
762
762
|
});
|
|
763
763
|
|
|
@@ -774,13 +774,10 @@ describe('Filter Builder', function () {
|
|
|
774
774
|
let finalFilter = await builder.buildFilter();
|
|
775
775
|
let clauses = spliceFilterForAnds(finalFilter);
|
|
776
776
|
expect(clauses[0].phrase).toBe(filter);
|
|
777
|
-
expect(clauses[1].field).toBe('status');
|
|
777
|
+
expect(clauses[1].field).toBe('(status');
|
|
778
778
|
expect(clauses[1].operator).toBe('in');
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
// const restrictionDate = new Date(clauses[2].condition)
|
|
782
|
-
// const now = new Date();
|
|
783
|
-
// expect(now.getTime()).toBeLessThan(restrictionDate.getTime());
|
|
779
|
+
expect(clauses[2].phrase).toBe('defined(published_on)');
|
|
780
|
+
expect(clauses[3].field).toBe('published_on');
|
|
784
781
|
|
|
785
782
|
builder = new FilterBuilder(filter,
|
|
786
783
|
{
|
|
@@ -790,8 +787,8 @@ describe('Filter Builder', function () {
|
|
|
790
787
|
finalFilter = await builder.buildFilter();
|
|
791
788
|
clauses = spliceFilterForAnds(finalFilter);
|
|
792
789
|
expect(clauses[0].phrase).toBe(filter);
|
|
793
|
-
expect(clauses[
|
|
794
|
-
expect(clauses[
|
|
790
|
+
expect(clauses[3].field).toBe('published_on');
|
|
791
|
+
expect(clauses[3].operator).toBe('>=');
|
|
795
792
|
});
|
|
796
793
|
|
|
797
794
|
function spliceFilterForAnds(filter) {
|