Use flow-model in gr-create-flow
Bug: Google b/431939712
Release-Notes: skip
Change-Id: I9c962a6a37f4745d41685afeca4c0757c82c5dcc
diff --git a/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow.ts b/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow.ts
index d2656d0..f152806 100644
--- a/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow.ts
+++ b/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow.ts
@@ -18,6 +18,7 @@
import {MdOutlinedTextField} from '@material/web/textfield/outlined-text-field';
import {resolve} from '../../../models/dependency';
import {configModelToken} from '../../../models/config/config-model';
+import {flowsModelToken} from '../../../models/flows/flows-model';
import {subscribe} from '../../lit/subscription-controller';
import {throwingErrorCallback} from '../../shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper';
import {
@@ -60,6 +61,8 @@
private readonly getConfigModel = resolve(this, configModelToken);
+ private readonly getFlowsModel = resolve(this, flowsModelToken);
+
private readonly projectSuggestions: SuggestionProvider = (
predicate,
expression
@@ -347,17 +350,12 @@
return {condition: stage.condition};
}),
};
- await this.restApiService.createFlow(this.changeNum, flowInput, e => {
- console.error(e);
- });
+ await this.getFlowsModel().createFlow(flowInput);
this.stages = [];
this.currentCondition = '';
this.currentAction = '';
this.currentParameter = '';
this.loading = false;
- this.dispatchEvent(
- new CustomEvent('flow-created', {bubbles: true, composed: true})
- );
}
}
diff --git a/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow_test.ts b/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow_test.ts
index 1640709..ac71093 100644
--- a/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-flows/gr-create-flow_test.ts
@@ -7,21 +7,20 @@
import './gr-create-flow';
import {assert, fixture, html} from '@open-wc/testing';
import {GrCreateFlow} from './gr-create-flow';
-import {
- mockPromise,
- queryAll,
- queryAndAssert,
- stubRestApi,
-} from '../../../test/test-utils';
+import {queryAll, queryAndAssert} from '../../../test/test-utils';
import {NumericChangeId} from '../../../types/common';
import {GrButton} from '../../shared/gr-button/gr-button';
import {MdOutlinedTextField} from '@material/web/textfield/outlined-text-field';
import {GrSearchAutocomplete} from '../../core/gr-search-autocomplete/gr-search-autocomplete';
+import {FlowsModel, flowsModelToken} from '../../../models/flows/flows-model';
+import {testResolver} from '../../../test/common-test-setup';
suite('gr-create-flow tests', () => {
let element: GrCreateFlow;
+ let flowsModel: FlowsModel;
setup(async () => {
+ flowsModel = testResolver(flowsModelToken);
element = await fixture<GrCreateFlow>(
html`<gr-create-flow></gr-create-flow>`
);
@@ -122,7 +121,7 @@
});
test('creates a flow with one stage', async () => {
- const createFlowStub = stubRestApi('createFlow').returns(mockPromise());
+ const createFlowStub = sinon.stub(flowsModel, 'createFlow');
const searchAutocomplete = queryAndAssert<GrSearchAutocomplete>(
element,
@@ -146,7 +145,7 @@
await element.updateComplete;
assert.isTrue(createFlowStub.calledOnce);
- const flowInput = createFlowStub.lastCall.args[1];
+ const flowInput = createFlowStub.lastCall.args[0];
assert.deepEqual(flowInput.stage_expressions, [
{
condition:
@@ -157,7 +156,7 @@
});
test('creates a flow with parameters', async () => {
- const createFlowStub = stubRestApi('createFlow').returns(mockPromise());
+ const createFlowStub = sinon.stub(flowsModel, 'createFlow');
const searchAutocomplete = queryAndAssert<GrSearchAutocomplete>(
element,
@@ -188,7 +187,7 @@
await element.updateComplete;
assert.isTrue(createFlowStub.calledOnce);
- const flowInput = createFlowStub.lastCall.args[1];
+ const flowInput = createFlowStub.lastCall.args[0];
assert.deepEqual(flowInput.stage_expressions, [
{
condition:
@@ -199,7 +198,7 @@
});
test('creates a flow with multiple stages', async () => {
- const createFlowStub = stubRestApi('createFlow').returns(mockPromise());
+ const createFlowStub = sinon.stub(flowsModel, 'createFlow');
const searchAutocomplete = queryAndAssert<GrSearchAutocomplete>(
element,
@@ -238,7 +237,7 @@
await element.updateComplete;
assert.isTrue(createFlowStub.calledOnce);
- const flowInput = createFlowStub.lastCall.args[1];
+ const flowInput = createFlowStub.lastCall.args[0];
assert.deepEqual(flowInput.stage_expressions, [
{
condition:
@@ -254,7 +253,7 @@
});
test('create flow with added stages and current input', async () => {
- const createFlowStub = stubRestApi('createFlow').returns(mockPromise());
+ const createFlowStub = sinon.stub(flowsModel, 'createFlow');
const searchAutocomplete = queryAndAssert<GrSearchAutocomplete>(
element,
@@ -290,7 +289,7 @@
await element.updateComplete;
assert.isTrue(createFlowStub.calledOnce);
- const flowInput = createFlowStub.lastCall.args[1];
+ const flowInput = createFlowStub.lastCall.args[0];
assert.deepEqual(flowInput.stage_expressions, [
{
condition:
diff --git a/polygerrit-ui/app/elements/change/gr-flows/gr-flows.ts b/polygerrit-ui/app/elements/change/gr-flows/gr-flows.ts
index f2f93d0..e272eda 100644
--- a/polygerrit-ui/app/elements/change/gr-flows/gr-flows.ts
+++ b/polygerrit-ui/app/elements/change/gr-flows/gr-flows.ts
@@ -173,10 +173,7 @@
return html`
<div class="container">
<h2 class="main-heading">Create new flow</h2>
- <gr-create-flow
- .changeNum=${this.changeNum}
- @flow-created=${() => this.getFlowsModel().reload()}
- ></gr-create-flow>
+ <gr-create-flow .changeNum=${this.changeNum}></gr-create-flow>
<hr />
${this.renderFlowsList()}
</div>
diff --git a/polygerrit-ui/app/elements/change/gr-flows/gr-flows_test.ts b/polygerrit-ui/app/elements/change/gr-flows/gr-flows_test.ts
index 212bf1d..b21b090 100644
--- a/polygerrit-ui/app/elements/change/gr-flows/gr-flows_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-flows/gr-flows_test.ts
@@ -10,7 +10,6 @@
import {FlowInfo, FlowStageState, Timestamp} from '../../../api/rest-api';
import {queryAndAssert} from '../../../test/test-utils';
import {NumericChangeId} from '../../../types/common';
-import {GrCreateFlow} from './gr-create-flow';
import sinon from 'sinon';
import {GrButton} from '../../shared/gr-button/gr-button';
import {GrDialog} from '../../shared/gr-dialog/gr-dialog';
@@ -308,20 +307,6 @@
assert.isFalse(dialog.open);
});
- test('reloads flows on flow-created event', async () => {
- const reloadStub = flowsModel.reload as sinon.SinonStub;
- reloadStub.resetHistory();
-
- const createFlow = queryAndAssert<GrCreateFlow>(element, 'gr-create-flow');
- createFlow.dispatchEvent(
- new CustomEvent('flow-created', {bubbles: true, composed: true})
- );
-
- await element.updateComplete;
-
- assert.isTrue(reloadStub.calledOnce);
- });
-
test('refreshes flows on button click', async () => {
const flow = {
uuid: 'flow1',
diff --git a/polygerrit-ui/app/models/flows/flows-model.ts b/polygerrit-ui/app/models/flows/flows-model.ts
index 31ecd58..70f0661 100644
--- a/polygerrit-ui/app/models/flows/flows-model.ts
+++ b/polygerrit-ui/app/models/flows/flows-model.ts
@@ -6,7 +6,7 @@
import {BehaviorSubject, combineLatest, from, of} from 'rxjs';
import {catchError, map, switchMap} from 'rxjs/operators';
import {ChangeModel} from '../change/change-model';
-import {FlowInfo} from '../../api/rest-api';
+import {FlowInfo, FlowInput} from '../../api/rest-api';
import {Model} from '../base/model';
import {define} from '../dependency';
@@ -81,4 +81,10 @@
await this.restApiService.deleteFlow(this.changeNum, flowId);
this.reload();
}
+
+ async createFlow(flowInput: FlowInput) {
+ if (!this.changeNum) return;
+ await this.restApiService.createFlow(this.changeNum, flowInput);
+ this.reload();
+ }
}