Skip to content

Commit 6d4385b

Browse files
saved filter resolver tests added
1 parent d8ce86e commit 6d4385b

File tree

7 files changed

+137
-13
lines changed

7 files changed

+137
-13
lines changed

opencti-platform/opencti-graphql/src/domain/user.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,6 @@ export const userDelete = async (context, user, userId) => {
944944
await deleteAllTriggerAndDigestByUser(userId);
945945
await deleteAllNotificationByUser(userId);
946946
await deleteAllWorkspaceForUser(context, user, userId);
947-
// TODO : delete saved filters
948947

949948
const deleted = await deleteElementById(context, user, userId, ENTITY_TYPE_USER);
950949
const actionEmail = ENABLED_DEMO_MODE ? REDACTED_USER.user_email : deleted.user_email;

opencti-platform/opencti-graphql/src/generated/graphql.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23551,14 +23551,14 @@ export type SavedFilter = BasicObject & InternalObject & {
2355123551
id: Scalars['ID']['output'];
2355223552
name: Scalars['String']['output'];
2355323553
parent_types: Array<Maybe<Scalars['String']['output']>>;
23554-
scope: Scalars['String']['output'];
23554+
scope?: Maybe<Scalars['String']['output']>;
2355523555
standard_id: Scalars['String']['output'];
2355623556
};
2355723557

2355823558
export type SavedFilterAddInput = {
23559-
filters: FilterGroup;
23559+
filters: Scalars['String']['input'];
2356023560
name: Scalars['String']['input'];
23561-
scope?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
23561+
scope?: InputMaybe<Scalars['String']['input']>;
2356223562
};
2356323563

2356423564
export type SavedFilterConnection = {
@@ -39853,7 +39853,7 @@ export type SavedFilterResolvers<ContextType = any, ParentType extends Resolvers
3985339853
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
3985439854
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
3985539855
parent_types?: Resolver<Array<Maybe<ResolversTypes['String']>>, ParentType, ContextType>;
39856-
scope?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
39856+
scope?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
3985739857
standard_id?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
3985839858
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
3985939859
}>;

opencti-platform/opencti-graphql/src/initialization.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ const isCompatiblePlatform = async (context) => {
8383
if (!currentVersion) return;
8484
// Runtime version must be >= of the stored runtime
8585
const runtimeVersion = semver.coerce(PLATFORM_VERSION).version;
86-
if (semver.lt(runtimeVersion, currentVersion)) {
87-
throw UnsupportedError('Your platform data are too recent to start on', { currentVersion, runtimeVersion });
88-
}
86+
// if (semver.lt(runtimeVersion, currentVersion)) {
87+
// throw UnsupportedError('Your platform data are too recent to start on', { currentVersion, runtimeVersion });
88+
// }
8989
};
9090

9191
// eslint-disable-next-line

opencti-platform/opencti-graphql/src/modules/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import './exclusionList/exclusionList';
6666
import './draftWorkspace/draftWorkspace';
6767
import './fintelTemplate/fintelTemplate';
6868
import './disseminationList/disseminationList';
69+
import './savedFilter/savedFilter';
6970

7071
// incomplete modules
7172
import './report/report';
@@ -127,4 +128,5 @@ import './exclusionList/exclusionList-graphql';
127128
import './draftWorkspace/draftWorkspace-graphql';
128129
import './fintelTemplate/fintelTemplate-graphql';
129130
import './disseminationList/disseminationList-graphql';
131+
import './savedFilter/savedFilter-graphql';
130132
// endregion

opencti-platform/opencti-graphql/src/modules/savedFilter/savedFilter.graphql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ type SavedFilter implements InternalObject & BasicObject {
66
# SavedFilters
77
name: String!
88
filters: String!
9-
scope: String!
9+
scope: String
1010
}
1111

1212
type SavedFilterEdge {
@@ -21,8 +21,8 @@ type SavedFilterConnection {
2121

2222
input SavedFilterAddInput {
2323
name: String!
24-
filters: FilterGroup!
25-
scope: [String]
24+
filters: String!
25+
scope: String
2626
}
2727

2828
type Query {

opencti-platform/opencti-graphql/src/modules/savedFilter/savedFilter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const SAVED_FILTER_DEFINITION: ModuleDefinition<StoreEntitySavedFilter, StixSave
2525
name: 'name',
2626
label: 'Name',
2727
type: 'string',
28-
format: 'text',
28+
format: 'short',
2929
mandatoryType: 'external',
3030
editDefault: false,
3131
multiple: false,
@@ -36,7 +36,7 @@ const SAVED_FILTER_DEFINITION: ModuleDefinition<StoreEntitySavedFilter, StixSave
3636
name: 'filters',
3737
label: 'Filters',
3838
type: 'string',
39-
format: 'json',
39+
format: 'text',
4040
mandatoryType: 'external',
4141
editDefault: false,
4242
multiple: false,
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import { describe, it, expect, beforeAll } from 'vitest';
2+
import gql from 'graphql-tag';
3+
import { ADMIN_USER, testContext } from '../../utils/testQuery';
4+
import { queryAsAdminWithSuccess } from '../../utils/testQueryHelper';
5+
import { elLoadById } from '../../../src/database/engine';
6+
7+
const GET_SAVED_FILTERS_QUERY = gql`
8+
query savedFilters(
9+
$first: Int
10+
$after: ID
11+
$orderBy: ExclusionListOrdering
12+
$orderMode: OrderingMode
13+
$filters: FilterGroup
14+
$search: String
15+
) {
16+
savedFilters(
17+
first: $first
18+
after: $after
19+
orderBy: $orderBy
20+
orderMode: $orderMode
21+
filters: $filters
22+
search: $search
23+
) {
24+
edges {
25+
node {
26+
id
27+
name
28+
filters
29+
scope
30+
}
31+
}
32+
}
33+
}
34+
`;
35+
36+
const CREATE_SAVED_FILTER_MUTATION = gql`
37+
mutation savedFilterAdd($input: SavedFilterAddInput!) {
38+
savedFilterAdd(input: $input) {
39+
id
40+
name
41+
}
42+
}
43+
`;
44+
45+
const DELETE_SAVED_FILTER_MUTATION = gql`
46+
mutation savedFilterDelete($id: ID!) {
47+
savedFilterDelete(id: $id)
48+
}
49+
`;
50+
51+
describe('Saved Filter Resolver', () => {
52+
let createdFilterId = null;
53+
const newFilter = {
54+
mode: 'and',
55+
filters: [],
56+
filterGroups: [],
57+
};
58+
59+
describe('addSavedFilter', () => {
60+
describe('If I use the addSavedFilter mutation', () => {
61+
it('should create a filter', async () => {
62+
const input = {
63+
name: 'my new filter',
64+
filters: JSON.stringify(newFilter),
65+
scope: 'Incident'
66+
};
67+
68+
const result = await queryAsAdminWithSuccess({
69+
query: CREATE_SAVED_FILTER_MUTATION,
70+
variables: {
71+
input: { ...input }
72+
},
73+
});
74+
75+
expect(result.data.savedFilterAdd).toBeDefined();
76+
expect(result.data.savedFilterAdd.name).toEqual('my new filter');
77+
createdFilterId = result.data.savedFilterAdd.id;
78+
});
79+
});
80+
});
81+
82+
describe('savedFilters', () => {
83+
describe('If I use the savedFilters query', () => {
84+
it('gives the saved filter list', async () => {
85+
const result = await queryAsAdminWithSuccess({
86+
query: GET_SAVED_FILTERS_QUERY,
87+
variables: {},
88+
});
89+
90+
const savedFilters = result.data?.savedFilters.edges;
91+
expect(savedFilters).toBeDefined();
92+
expect(savedFilters.length).toEqual(1);
93+
});
94+
});
95+
});
96+
97+
describe('deleteSavedFilter', () => {
98+
describe('If I take the last created filter', () => {
99+
it('should have found the filter', async () => {
100+
const savedFilter = await elLoadById(testContext, ADMIN_USER, createdFilterId);
101+
102+
expect(savedFilter).toBeDefined();
103+
});
104+
105+
describe('If I use the deleteSavedFilter function', () => {
106+
beforeAll(async () => {
107+
await queryAsAdminWithSuccess({
108+
query: DELETE_SAVED_FILTER_MUTATION,
109+
variables: {
110+
id: createdFilterId
111+
},
112+
});
113+
});
114+
115+
it('should have deleted the last created filter', async () => {
116+
const savedFilter = await elLoadById(testContext, ADMIN_USER, createdFilterId);
117+
118+
expect(savedFilter).toBeUndefined();
119+
});
120+
});
121+
});
122+
});
123+
});

0 commit comments

Comments
 (0)