Skip to content

Commit 743db7a

Browse files
committed
adds support for tenants activation / deactivation
1 parent 7c2e867 commit 743db7a

File tree

4 files changed

+74
-4
lines changed

4 files changed

+74
-4
lines changed

src/batch/journey.test.ts

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ describe('multi tenancy', () => {
544544
});
545545
});
546546

547-
it('create Passage classes tenants', () => {
547+
it('creates Passage class tenants', () => {
548548
return client.schema
549549
.tenantsCreator(passageClassName, tenants)
550550
.do()
@@ -556,7 +556,7 @@ describe('multi tenancy', () => {
556556
});
557557
});
558558

559-
it('get Passage classes tenants', () => {
559+
it('gets Passage class tenants', () => {
560560
return client.schema
561561
.tenantsGetter(passageClassName)
562562
.do()
@@ -568,6 +568,51 @@ describe('multi tenancy', () => {
568568
});
569569
});
570570

571+
it('updates Passage class tenants (deactivates)', () => {
572+
return client.schema
573+
.tenantsUpdater(passageClassName, [
574+
{ name: tenants[0].name, activityStatus: 'COLD' },
575+
{ name: tenants[1].name, activityStatus: 'COLD' },
576+
])
577+
.do()
578+
.then((res) => {
579+
expect(res).toHaveLength(2);
580+
})
581+
.catch((e) => {
582+
throw new Error('it should not have errord ' + e);
583+
});
584+
});
585+
586+
it('does not get objects due to inactivity', () => {
587+
return client.data
588+
.getter()
589+
.withClassName(passageClassName)
590+
.withTenant(tenants[0].name!)
591+
.do()
592+
.then(() => {
593+
throw new Error('should fail on data get');
594+
})
595+
.catch((err) => {
596+
expect(err.message).toContain('422');
597+
expect(err.message).toContain('tenant not active');
598+
});
599+
});
600+
601+
it('updates Passage class tenants (activates again)', () => {
602+
return client.schema
603+
.tenantsUpdater(passageClassName, [
604+
{ name: tenants[0].name, activityStatus: 'HOT' },
605+
{ name: tenants[1].name, activityStatus: 'HOT' },
606+
])
607+
.do()
608+
.then((res) => {
609+
expect(res).toHaveLength(2);
610+
})
611+
.catch((e) => {
612+
throw new Error('it should not have errord ' + e);
613+
});
614+
});
615+
571616
it('should batch import Passage objects', () => {
572617
const toImport: WeaviateObject[] = [];
573618
for (let i = 0; i < passageIDs.length; i++) {

src/schema/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import ShardUpdater from './shardUpdater';
99
import ShardsUpdater from './shardsUpdater';
1010
import TenantsCreator from './tenantsCreator';
1111
import TenantsGetter from './tenantsGetter';
12+
import TenantsUpdater from './tenantsUpdater';
1213
import TenantsDeleter from './tenantsDeleter';
1314
import Connection from '../connection';
1415
import { Tenant } from '../openapi/types';
@@ -25,6 +26,7 @@ export interface Schema {
2526
shardsUpdater: () => ShardsUpdater;
2627
tenantsCreator: (className: string, tenants: Array<Tenant>) => TenantsCreator;
2728
tenantsGetter: (className: string) => TenantsGetter;
29+
tenantsUpdater: (className: string, tenants: Array<Tenant>) => TenantsUpdater;
2830
tenantsDeleter: (className: string, tenants: Array<string>) => TenantsDeleter;
2931
}
3032

@@ -42,6 +44,8 @@ const schema = (client: Connection): Schema => {
4244
tenantsCreator: (className: string, tenants: Array<Tenant>) =>
4345
new TenantsCreator(client, className, tenants),
4446
tenantsGetter: (className: string) => new TenantsGetter(client, className),
47+
tenantsUpdater: (className: string, tenants: Array<Tenant>) =>
48+
new TenantsUpdater(client, className, tenants),
4549
tenantsDeleter: (className: string, tenants: Array<string>) =>
4650
new TenantsDeleter(client, className, tenants),
4751
};
@@ -56,5 +60,6 @@ export { default as SchemaGetter } from './getter';
5660
export { default as ShardUpdater } from './shardUpdater';
5761
export { default as ShardsUpdater } from './shardsUpdater';
5862
export { default as TenantsCreator } from './tenantsCreator';
63+
export { default as TenantsUpdater } from './tenantsUpdater';
5964
export { default as TenantsGetter } from './tenantsGetter';
6065
export { default as TenantsDeleter } from './tenantsDeleter';

src/schema/tenantsDeleter.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
import { isValidStringProperty } from '../validation/string';
21
import Connection from '../connection';
32
import { CommandBase } from '../validation/commandBase';
4-
import { Tenant } from '../openapi/types';
53

64
export default class TenantsDeleter extends CommandBase {
75
private className: string;

src/schema/tenantsUpdater.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import Connection from '../connection';
2+
import { CommandBase } from '../validation/commandBase';
3+
import { Tenant } from '../openapi/types';
4+
5+
export default class TenantsCreator extends CommandBase {
6+
private className: string;
7+
private tenants: Array<Tenant>;
8+
9+
constructor(client: Connection, className: string, tenants: Array<Tenant>) {
10+
super(client);
11+
this.className = className;
12+
this.tenants = tenants;
13+
}
14+
15+
validate = () => {
16+
// nothing to validate
17+
};
18+
19+
do = (): Promise<Array<Tenant>> => {
20+
return this.client.put(`/schema/${this.className}/tenants`, this.tenants);
21+
};
22+
}

0 commit comments

Comments
 (0)