Merge branch 'release' of github.com:appsmithorg/appsmith into release

This commit is contained in:
Arpit Mohan 2020-07-22 13:12:14 +05:30
commit 52d5c4bdcd
11 changed files with 70 additions and 80 deletions

View File

@ -153,6 +153,10 @@ jobs:
CYPRESS_URL: ${{ secrets.CYPRESS_URL }} CYPRESS_URL: ${{ secrets.CYPRESS_URL }}
CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }} CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }} CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
run: | run: |
./cypress/setup-test.sh ./cypress/setup-test.sh
@ -164,6 +168,10 @@ jobs:
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }} CYPRESS_USERNAME: ${{ secrets.CYPRESS_USERNAME }}
CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }} CYPRESS_PASSWORD: ${{ secrets.CYPRESS_PASSWORD }}
CYPRESS_TESTUSERNAME1: ${{ secrets.CYPRESS_TESTUSERNAME1 }}
CYPRESS_TESTPASSWORD1: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
CYPRESS_TESTUSERNAME2: ${{ secrets.CYPRESS_TESTUSERNAME2 }}
CYPRESS_TESTPASSWORD2: ${{ secrets.CYPRESS_TESTPASSWORD1 }}
with: with:
browser: chrome browser: chrome
headless: true headless: true

View File

@ -3,7 +3,7 @@
"methods": "users", "methods": "users",
"headerKey": "Content-Type", "headerKey": "Content-Type",
"headerValue": "application/json", "headerValue": "application/json",
"headerValueBlank": " ", "headerValueBlank": "",
"queryKey": "page", "queryKey": "page",
"queryValue": "2", "queryValue": "2",
"queryAndValue": "users?page=2", "queryAndValue": "users?page=2",

View File

@ -112,8 +112,8 @@ describe("API Panel Test Functionality", function() {
cy.EnterSourceDetailsWithHeader( cy.EnterSourceDetailsWithHeader(
testdata.baseUrl, testdata.baseUrl,
testdata.methods, testdata.methods,
testdata.headerKey, testdata.headerValueBlank,
testdata.headerValue, testdata.headerValueBlank,
); );
cy.RunAPI(); cy.RunAPI();
cy.ResponseStatusCheck(testdata.successStatusCode); cy.ResponseStatusCheck(testdata.successStatusCode);
@ -142,8 +142,8 @@ describe("API Panel Test Functionality", function() {
cy.EnterSourceDetailsWithQueryParam( cy.EnterSourceDetailsWithQueryParam(
testdata.baseUrl, testdata.baseUrl,
testdata.methods, testdata.methods,
testdata.headerKey, testdata.headerValueBlank,
testdata.headerValue, testdata.headerValueBlank,
testdata.queryKey, testdata.queryKey,
testdata.queryValue, testdata.queryValue,
); );

View File

@ -1,35 +1,39 @@
/// <reference types="Cypress" /> /*
const testdata = require("../../../fixtures/testdata.json"); * Commenting because CE does not have marketplace anymore
const apiwidget = require("../../../locators/apiWidgetslocator.json"); *
describe("API Panel Test Functionality ", function() { * */
it("Test Market place API by adding to a page", function() { // /// <reference types="Cypress" />
cy.log("Login Successful"); // const testdata = require("../../../fixtures/testdata.json");
cy.NavigateToAPI_Panel(); // const apiwidget = require("../../../locators/apiWidgetslocator.json");
cy.wait("@getCategories"); // describe("API Panel Test Functionality ", function() {
cy.wait("@getTemplateCollections"); // it("Test Market place API by adding to a page", function() {
cy.wait("@get3PProviders"); // cy.log("Login Successful");
cy.log("Navigation to API Panel screen successful"); // cy.NavigateToAPI_Panel();
cy.get(apiwidget.marketPlaceapi) // cy.wait("@getCategories");
.first() // cy.wait("@getTemplateCollections");
.click(); // cy.wait("@get3PProviders");
cy.wait("@get3PProviderTemplates"); // cy.log("Navigation to API Panel screen successful");
cy.get(".apiName") // cy.get(apiwidget.marketPlaceapi)
.first() // .first()
.invoke("text") // .click();
.then(ApiName => { // cy.wait("@get3PProviderTemplates");
cy.get(apiwidget.addPageButton) // cy.get(".apiName")
.first() // .first()
.click(); // .invoke("text")
const searchApiName = ApiName.replace(/\s/g, ""); // .then(ApiName => {
cy.log(searchApiName); // cy.get(apiwidget.addPageButton)
cy.wait("@getActions"); // .first()
cy.SearchAPIandClick(searchApiName); // .click();
cy.get(apiwidget.apidocumentaionLink) // const searchApiName = ApiName.replace(/\s/g, "");
.invoke("text") // cy.log(searchApiName);
.then(apidocumentation => { // cy.wait("@getActions");
cy.log(apidocumentation); // cy.SearchAPIandClick(searchApiName);
expect(apidocumentation).to.eq("API documentation"); // cy.get(apiwidget.apidocumentaionLink)
}); // .invoke("text")
}); // .then(apidocumentation => {
}); // cy.log(apidocumentation);
}); // expect(apidocumentation).to.eq("API documentation");
// });
// });
// });
// });

View File

@ -1307,10 +1307,8 @@ Cypress.Commands.add("startServerAndRoutes", () => {
cy.route("POST", "/api/v1/applications/publish/*").as("publishApp"); cy.route("POST", "/api/v1/applications/publish/*").as("publishApp");
cy.route("PUT", "/api/v1/layouts/*/pages/*").as("updateLayout"); cy.route("PUT", "/api/v1/layouts/*/pages/*").as("updateLayout");
cy.route("PUT", "/api/v1/actions/*").as("putActions");
cy.route("POST", "/track/*").as("postTrack"); cy.route("POST", "/track/*").as("postTrack");
cy.route("POST", "/api/v1/actions/execute").as("postExecute"); cy.route("POST", "/api/v1/actions/execute").as("postExecute");
cy.route("POST", "/api/v1/actions").as("postaction");
cy.route("POST", "/api/v1/actions").as("createNewApi"); cy.route("POST", "/api/v1/actions").as("createNewApi");
cy.route("POST", "/api/v1/import?type=CURL&pageId=*&name=*").as("curlImport"); cy.route("POST", "/api/v1/import?type=CURL&pageId=*&name=*").as("curlImport");

View File

@ -4,7 +4,7 @@ import {
ReduxAction, ReduxAction,
ReduxActionErrorTypes, ReduxActionErrorTypes,
} from "constants/ReduxActionConstants"; } from "constants/ReduxActionConstants";
import { Action, RestAction } from "entities/Action"; import { Action } from "entities/Action";
import { batchAction } from "actions/batchActions"; import { batchAction } from "actions/batchActions";
export const createActionRequest = (payload: Partial<Action>) => { export const createActionRequest = (payload: Partial<Action>) => {
@ -50,7 +50,7 @@ export const fetchActionsForPage = (pageId: string) => {
}; };
}; };
export const fetchActionsForPageSuccess = (actions: RestAction[]) => { export const fetchActionsForPageSuccess = (actions: Action[]) => {
return { return {
type: ReduxActionTypes.FETCH_ACTIONS_FOR_PAGE_SUCCESS, type: ReduxActionTypes.FETCH_ACTIONS_FOR_PAGE_SUCCESS,
payload: actions, payload: actions,
@ -74,7 +74,7 @@ export const updateAction = (payload: { id: string }) => {
}; };
}; };
export const updateActionSuccess = (payload: { data: RestAction }) => { export const updateActionSuccess = (payload: { data: Action }) => {
return { return {
type: ReduxActionTypes.UPDATE_ACTION_SUCCESS, type: ReduxActionTypes.UPDATE_ACTION_SUCCESS,
payload, payload,
@ -107,7 +107,7 @@ export const moveActionRequest = (payload: {
}; };
}; };
export const moveActionSuccess = (payload: RestAction) => { export const moveActionSuccess = (payload: Action) => {
return { return {
type: ReduxActionTypes.MOVE_ACTION_SUCCESS, type: ReduxActionTypes.MOVE_ACTION_SUCCESS,
payload, payload,
@ -135,10 +135,7 @@ export const copyActionRequest = (payload: {
}; };
}; };
export const copyActionSuccess = (payload: { export const copyActionSuccess = (payload: Action) => {
id: string;
destinationPageId: string;
}) => {
return { return {
type: ReduxActionTypes.COPY_ACTION_SUCCESS, type: ReduxActionTypes.COPY_ACTION_SUCCESS,
payload, payload,

View File

@ -46,35 +46,17 @@ type Props = EditorProps &
class EmbeddedDatasourcePathComponent extends React.Component<Props> { class EmbeddedDatasourcePathComponent extends React.Component<Props> {
handleDatasourceUrlUpdate = (datasourceUrl: string) => { handleDatasourceUrlUpdate = (datasourceUrl: string) => {
const { datasource, pluginId, orgId, datasourceList } = this.props; const { datasource, pluginId, orgId } = this.props;
const urlHasUpdated = const urlHasUpdated =
datasourceUrl !== datasource.datasourceConfiguration?.url; datasourceUrl !== datasource.datasourceConfiguration?.url;
if (urlHasUpdated) { if (urlHasUpdated) {
if ("id" in datasource && datasource.id) { this.props.updateDatasource({
this.props.updateDatasource({ ...DEFAULT_DATASOURCE(pluginId, orgId),
...DEFAULT_DATASOURCE(pluginId, orgId), datasourceConfiguration: {
datasourceConfiguration: { ...datasource.datasourceConfiguration,
...datasource.datasourceConfiguration, url: datasourceUrl,
url: datasourceUrl, },
}, });
});
} else {
const matchesExistingDatasource = _.find(
datasourceList,
d => d.datasourceConfiguration?.url === datasourceUrl,
);
if (matchesExistingDatasource) {
this.props.updateDatasource(matchesExistingDatasource);
} else {
this.props.updateDatasource({
...DEFAULT_DATASOURCE(pluginId, orgId),
datasourceConfiguration: {
...datasource.datasourceConfiguration,
url: datasourceUrl,
},
});
}
}
} }
}; };
@ -113,7 +95,7 @@ class EmbeddedDatasourcePathComponent extends React.Component<Props> {
const matches = value.match(urlGroupsRegexExp); const matches = value.match(urlGroupsRegexExp);
if (matches && matches.length) { if (matches && matches.length) {
datasourceUrl = matches[1]; datasourceUrl = matches[1];
path = `${matches[2]}${matches[3]}`; path = `${matches[2] || ""}${matches[3] || ""}`;
} }
} else { } else {
datasourceUrl = value; datasourceUrl = value;

View File

@ -249,6 +249,7 @@ const actionsReducer = createReducer(initialState, {
...a, ...a,
config: { config: {
...a.config, ...a.config,
id: "TEMP_COPY_ID",
name: action.payload.name, name: action.payload.name,
pageId: action.payload.destinationPageId, pageId: action.payload.destinationPageId,
}, },

View File

@ -384,7 +384,7 @@ export function* refactorActionName(
} }
function* saveApiNameSaga(action: ReduxAction<{ id: string; name: string }>) { function* saveApiNameSaga(action: ReduxAction<{ id: string; name: string }>) {
// Takes from drafts, checks if the name isValid, saves // Takes from state, checks if the name isValid, saves
const apiId = action.payload.id; const apiId = action.payload.id;
const api = yield select(state => const api = yield select(state =>
state.entities.actions.find( state.entities.actions.find(

View File

@ -49,7 +49,7 @@ cd $boot_script_path
sudo curl -O https://raw.githubusercontent.com/appsmithorg/appsmith/release/deploy/configure-ssl.sh sudo curl -O https://raw.githubusercontent.com/appsmithorg/appsmith/release/deploy/configure-ssl.sh
sudo chown ubuntu:ubuntu $boot_script_path/$config_ssl_file_name && sudo chmod +x $boot_script_path/$config_ssl_file_name sudo chown ubuntu:ubuntu $boot_script_path/$config_ssl_file_name && sudo chmod +x $boot_script_path/$config_ssl_file_name
sudo curl -O https://raw.githubusercontent.com/appsmithorg/appsmith/feature/deploy-script/deploy/aws/boot.sh sudo curl -O https://raw.githubusercontent.com/appsmithorg/appsmith/release/deploy/aws/boot.sh
sudo chown ubuntu:ubuntu $boot_script_path/$boot_file_name && sudo chmod +x $boot_script_path/$boot_file_name sudo chown ubuntu:ubuntu $boot_script_path/$boot_file_name && sudo chmod +x $boot_script_path/$boot_file_name
USER="ubuntu" USER="ubuntu"