Skip to content

Commit

Permalink
Remove __trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
inlined authored and TheIronDev committed Oct 21, 2022
1 parent 5c038e6 commit b903593
Show file tree
Hide file tree
Showing 26 changed files with 2,679 additions and 283 deletions.
121 changes: 117 additions & 4 deletions spec/v1/cloud-functions.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import { expect } from "chai";

import {
Change,
Event,
EventContext,
makeCloudFunction,
Expand All @@ -41,7 +42,7 @@ describe("makeCloudFunction", () => {
legacyEventType: "providers/provider/eventTypes/event",
};

it("should put a __endpoint on the returned CloudFunction", () => {
it('should put a __trigger/__endpoint on the returned CloudFunction', () => {
const cf = makeCloudFunction({
provider: "mock.provider",
eventType: "mock.event",
Expand All @@ -50,6 +51,14 @@ describe("makeCloudFunction", () => {
handler: () => null,
});

expect(cf.__trigger).to.deep.equal({
eventTrigger: {
eventType: 'mock.provider.mock.event',
resource: 'resource',
service: 'service',
},
});

expect(cf.__endpoint).to.deep.equal({
...MINIMAL_V1_ENDPOINT,
platform: "gcfv1",
Expand All @@ -64,9 +73,17 @@ describe("makeCloudFunction", () => {
});
});

it("should have legacy event type in __endpoint if provided", () => {
it('should have legacy event type in __trigger/__endpoint if provided', () => {
const cf = makeCloudFunction(cloudFunctionArgs);

expect(cf.__trigger).to.deep.equal({
eventTrigger: {
eventType: 'providers/provider/eventTypes/event',
resource: 'resource',
service: 'service',
},
});

expect(cf.__endpoint).to.deep.equal({
...MINIMAL_V1_ENDPOINT,
platform: "gcfv1",
Expand Down Expand Up @@ -339,10 +356,106 @@ describe("makeAuth and makeAuthType", () => {
auth: {
uid: "user",
token: {
sub: "user",
sub: 'user',
},
},
authType: "USER",
authType: 'USER',
});
});
});

describe('Change', () => {
describe('applyFieldMask', () => {
const after = {
foo: 'bar',
num: 2,
obj: {
a: 1,
b: 2,
},
};

it('should handle deleted values', () => {
const sparseBefore = { baz: 'qux' };
const fieldMask = 'baz';
expect(
Change.applyFieldMask(sparseBefore, after, fieldMask)
).to.deep.equal({
foo: 'bar',
num: 2,
obj: {
a: 1,
b: 2,
},
baz: 'qux',
});
});

it('should handle created values', () => {
const sparseBefore = {};
const fieldMask = 'num,obj.a';
expect(
Change.applyFieldMask(sparseBefore, after, fieldMask)
).to.deep.equal({
foo: 'bar',
obj: {
b: 2,
},
});
});

it('should handle mutated values', () => {
const sparseBefore = {
num: 3,
obj: {
a: 3,
},
};
const fieldMask = 'num,obj.a';
expect(
Change.applyFieldMask(sparseBefore, after, fieldMask)
).to.deep.equal({
foo: 'bar',
num: 3,
obj: {
a: 3,
b: 2,
},
});
});
});

describe('fromJSON', () => {
it('should create a Change object with a `before` and `after`', () => {
const created = Change.fromJSON<any>({
before: { foo: 'bar' },
after: { foo: 'faz' },
});
expect(created instanceof Change).to.equal(true);
expect(created.before).to.deep.equal({ foo: 'bar' });
expect(created.after).to.deep.equal({ foo: 'faz' });
});

it('should apply the customizer function to `before` and `after`', () => {
function customizer<T>(input: any) {
_.set(input, 'another', 'value');
return input as T;
}
const created = Change.fromJSON<object>(
{
before: { foo: 'bar' },
after: { foo: 'faz' },
},
customizer
);
expect(created.before).to.deep.equal({
foo: 'bar',
another: 'value',
});
expect(created.after).to.deep.equal({
foo: 'faz',
another: 'value',
});
});
});
});
83 changes: 37 additions & 46 deletions spec/v1/function-builder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.region).to.deep.equal(["us-east1"]);
expect(fn.__trigger.regions).to.deep.equal(['us-east1']);
});

it("should allow multiple supported regions to be set", () => {
Expand All @@ -50,7 +50,7 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.region).to.deep.equal(["us-east1", "us-central1"]);
expect(fn.__trigger.regions).to.deep.equal(['us-east1', 'us-central1']);
});

it("should allow all supported regions to be set", () => {
Expand All @@ -68,15 +68,15 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.region).to.deep.equal([
"us-central1",
"us-east1",
"us-east4",
"europe-west1",
"europe-west2",
"europe-west3",
"asia-east2",
"asia-northeast1",
expect(fn.__trigger.regions).to.deep.equal([
'us-central1',
'us-east1',
'us-east4',
'europe-west1',
'europe-west2',
'europe-west3',
'asia-east2',
'asia-northeast1',
]);
});

Expand Down Expand Up @@ -104,13 +104,9 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.secretEnvironmentVariables).to.deep.equal([
{
key: "API_KEY",
},
]);

clearParams();
expect(fn.__trigger.availableMemoryMb).to.deep.equal(256);
expect(fn.__trigger.timeout).to.deep.equal('90s');
expect(fn.__trigger.failurePolicy).to.deep.equal({ retry: {} });
});

it("should apply a default failure policy if it's aliased with `true`", () => {
Expand All @@ -136,9 +132,9 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.region).to.deep.equal(["europe-west2"]);
expect(fn.__endpoint.availableMemoryMb).to.deep.equal(256);
expect(fn.__endpoint.timeoutSeconds).to.deep.equal(90);
expect(fn.__trigger.regions).to.deep.equal(['europe-west2']);
expect(fn.__trigger.availableMemoryMb).to.deep.equal(256);
expect(fn.__trigger.timeout).to.deep.equal('90s');
});

it("should allow both valid runtime options and supported region to be set in reverse order", () => {
Expand All @@ -151,9 +147,9 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.region).to.deep.equal(["europe-west1"]);
expect(fn.__endpoint.availableMemoryMb).to.deep.equal(256);
expect(fn.__endpoint.timeoutSeconds).to.deep.equal(90);
expect(fn.__trigger.regions).to.deep.equal(['europe-west1']);
expect(fn.__trigger.availableMemoryMb).to.deep.equal(256);
expect(fn.__trigger.timeout).to.deep.equal('90s');
});

it("should fail if supported region but invalid runtime options are set (reverse order)", () => {
Expand Down Expand Up @@ -223,7 +219,7 @@ describe("FunctionBuilder", () => {
.runWith({ ingressSettings: "ALLOW_INTERNAL_ONLY" })
.https.onRequest(() => undefined);

expect(fn.__endpoint.ingressSettings).to.equal("ALLOW_INTERNAL_ONLY");
expect(fn.__trigger.ingressSettings).to.equal('ALLOW_INTERNAL_ONLY');
});

it("should throw an error if user chooses an invalid ingressSettings", () => {
Expand All @@ -245,11 +241,7 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

if (!(fn.__endpoint.vpc instanceof ResetValue)) {
expect(fn.__endpoint.vpc.connector).to.equal("test-connector");
} else {
expect.fail("__endpoint.vpc unexpectedly set to RESET_VALUE");
}
expect(fn.__trigger.vpcConnector).to.equal('test-connector');
});

it("should allow a vpcConnectorEgressSettings to be set", () => {
Expand All @@ -261,11 +253,9 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

if (!(fn.__endpoint.vpc instanceof ResetValue)) {
expect(fn.__endpoint.vpc.egressSettings).to.equal("PRIVATE_RANGES_ONLY");
} else {
expect.fail("__endpoint.vpc unexpectedly set to RESET_VALUE");
}
expect(fn.__trigger.vpcConnectorEgressSettings).to.equal(
'PRIVATE_RANGES_ONLY'
);
});

it("should throw an error if user chooses an invalid vpcConnectorEgressSettings", () => {
Expand Down Expand Up @@ -294,16 +284,19 @@ describe("FunctionBuilder", () => {
expect(fn.__endpoint.serviceAccountEmail).to.equal(serviceAccount);
});

it("should allow a serviceAccount to be set with generated service account email", () => {
const serviceAccount = "test-service-account@";
it('should allow a serviceAccount to be set with generated service account email', () => {
const serviceAccount = 'test-service-account@';
const projectId = process.env.GCLOUD_PROJECT;
const fn = functions
.runWith({
serviceAccount,
})
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.serviceAccountEmail).to.equal(`test-service-account@`);
expect(fn.__trigger.serviceAccountEmail).to.equal(
`test-service-account@${projectId}.iam.gserviceaccount.com`
);
});

it("should set a null serviceAccountEmail if service account is set to `default`", () => {
Expand All @@ -315,7 +308,7 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.serviceAccountEmail).to.equal("default");
expect(fn.__trigger.serviceAccountEmail).to.be.null;
});

it("should throw an error if serviceAccount is set to an invalid value", () => {
Expand Down Expand Up @@ -349,8 +342,8 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.labels).to.deep.equal({
"valid-key": "valid-value",
expect(fn.__trigger.labels).to.deep.equal({
'valid-key': 'valid-value',
});
});

Expand Down Expand Up @@ -504,11 +497,7 @@ describe("FunctionBuilder", () => {
.auth.user()
.onCreate((user) => user);

expect(fn.__endpoint.secretEnvironmentVariables).to.deep.equal([
{
key: "API_KEY",
},
]);
expect(fn.__trigger.secrets).to.deep.equal(secrets);
});

it("should throw error given secrets expressed with full resource name", () => {
Expand All @@ -519,7 +508,9 @@ describe("FunctionBuilder", () => {
secrets: ["projects/my-project/secrets/API_KEY"],
})
).to.throw();
});

it('should throw error given invalid secret config', () => {
expect(() =>
functions.runWith({
secrets: [sp],
Expand Down
Loading

0 comments on commit b903593

Please sign in to comment.