From 01d34580b9819c92980cde24686a6a3ffa57703b Mon Sep 17 00:00:00 2001 From: Colin Megill Date: Fri, 30 Jul 2021 16:52:49 -0700 Subject: [PATCH] genesets e2e tests, undo/redo (#2327) * undo redo create * edit undo redo * all tests pass, add, edit * description * remove RER1 * remove rer1 * remove from hosted --- backend/test/fixtures/pbmc3k-genesets.csv | 2 +- .../test_czi_hosted/unit/common/test_api.py | 4 +- .../test/test_server/unit/common/test_api.py | 4 +- client/__tests__/e2e/e2eAnnotations.test.ts | 50 +++++++++++++++++-- .../src/components/geneExpression/geneSet.tsx | 1 + client/src/components/util/truncate.tsx | 17 ++++++- 6 files changed, 66 insertions(+), 12 deletions(-) diff --git a/backend/test/fixtures/pbmc3k-genesets.csv b/backend/test/fixtures/pbmc3k-genesets.csv index 83340d4c..ebd079de 100644 --- a/backend/test/fixtures/pbmc3k-genesets.csv +++ b/backend/test/fixtures/pbmc3k-genesets.csv @@ -16,6 +16,6 @@ summary test,,F5, summary test,,PIGU, geneset_to_delete,,, geneset_to_edit,,, -fill_this_geneset,,RER1, +fill_this_geneset,,, empty_this_geneset,,SIK1, brush_this_gene,,SIK1, \ No newline at end of file diff --git a/backend/test/test_czi_hosted/unit/common/test_api.py b/backend/test/test_czi_hosted/unit/common/test_api.py index 59af031d..6072ee53 100644 --- a/backend/test/test_czi_hosted/unit/common/test_api.py +++ b/backend/test/test_czi_hosted/unit/common/test_api.py @@ -444,7 +444,7 @@ class EndPointsCxg(EndPoints): {'genes': [], 'geneset_description': '', 'geneset_name': 'geneset_to_delete'}, {'genes': [], 'geneset_description': '', 'geneset_name': 'geneset_to_edit'}, { - 'genes': [{'gene_description': '', 'gene_symbol': 'RER1'}], + 'genes': [], 'geneset_description': '', 'geneset_name': 'fill_this_geneset' }, @@ -485,7 +485,7 @@ summary test,,F5,\r summary test,,PIGU,\r geneset_to_delete,,,\r geneset_to_edit,,,\r -fill_this_geneset,,RER1,\r +fill_this_geneset,,,\r empty_this_geneset,,SIK1,\r brush_this_gene,,SIK1,\r """ diff --git a/backend/test/test_server/unit/common/test_api.py b/backend/test/test_server/unit/common/test_api.py index 4ae65912..bb02b037 100644 --- a/backend/test/test_server/unit/common/test_api.py +++ b/backend/test/test_server/unit/common/test_api.py @@ -609,7 +609,7 @@ class EndPointsAnnDataGenesets(unittest.TestCase, EndPoints): {"genes": [], "geneset_description": "", "geneset_name": "geneset_to_delete"}, {"genes": [], "geneset_description": "", "geneset_name": "geneset_to_edit"}, { - "genes": [{"gene_description": "", "gene_symbol": "RER1"}], + "genes": [], "geneset_description": "", "geneset_name": "fill_this_geneset", }, @@ -651,7 +651,7 @@ summary test,,F5,\r summary test,,PIGU,\r geneset_to_delete,,,\r geneset_to_edit,,,\r -fill_this_geneset,,RER1,\r +fill_this_geneset,,,\r empty_this_geneset,,SIK1,\r brush_this_gene,,SIK1,\r """, diff --git a/client/__tests__/e2e/e2eAnnotations.test.ts b/client/__tests__/e2e/e2eAnnotations.test.ts index ee58099a..470a36ba 100644 --- a/client/__tests__/e2e/e2eAnnotations.test.ts +++ b/client/__tests__/e2e/e2eAnnotations.test.ts @@ -12,6 +12,7 @@ import { getTestId, getTestClass, getAllByClass, + clickOnUntil, getOneElementInnerHTML, } from "./puppeteerUtils"; @@ -76,6 +77,11 @@ const brushThisGeneGeneset = "brush_this_gene"; const geneBrushedCellCount = "109"; const subsetGeneBrushedCellCount = "96"; +const genesetDescriptionID = + "geneset-description-tooltip-fourth_gene_set: fourth description"; +const genesetDescriptionString = "fourth_gene_set: fourth description"; +const genesetToCheckForDescription = "fourth_gene_set"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any --- FIXME: disabled temporarily on migrate to TS. async function setup(config: any) { await goToPage(appUrlBase); @@ -177,7 +183,7 @@ describe.each([ expect(genesHTML).toMatchSnapshot(); }); - test("create a new geneset", async () => { + test("create a new geneset and undo/redo", async () => { if (config.withSubset) return; await setup(config); @@ -187,19 +193,45 @@ describe.each([ await createGeneset(genesetName); /* note: as of June 2021, the aria label is in the truncate component which clones the element */ await assertGenesetExists(genesetName); + await clickOn("undo"); + await assertGenesetDoesNotExist(genesetName); + await clickOn("redo"); + await assertGenesetExists(genesetName); }); - test("edit geneset name", async () => { + test("edit geneset name and undo/redo", async () => { await setup(config); await editGenesetName(editableGenesetName, editText); await assertGenesetExists(newGenesetName); + await clickOn("undo"); + await assertGenesetExists(editableGenesetName); + await clickOn("redo"); + await assertGenesetExists(newGenesetName); }); - test("delete a geneset", async () => { + test("delete a geneset and undo/redo", async () => { if (config.withSubset) return; await setup(config); await deleteGeneset(genesetToDeleteName); + await clickOn("undo"); + await assertGenesetExists(genesetToDeleteName); + await clickOn("redo"); + await assertGenesetDoesNotExist(genesetToDeleteName); + }); + test("geneset description", async () => { + if (config.withSubset) return; + + await setup(config); + + await clickOnUntil( + `${genesetToCheckForDescription}:geneset-expand`, + async () => { + expect(page).toMatchElement(getTestId(genesetDescriptionID), { + text: genesetDescriptionString, + }); + } + ); }); }); @@ -207,12 +239,16 @@ describe.each([ { withSubset: true, tag: "subset" }, { withSubset: false, tag: "whole" }, ])("GENE crud operations and interactions", (config) => { - test("add a gene to geneset", async () => { + test("add a gene to geneset and undo/redo", async () => { await setup(config); await addGeneToSet(setToAddGeneTo, geneToAddToSet); await expandGeneset(setToAddGeneTo); await assertGeneExistsInGeneset(geneToAddToSet); + await clickOn("undo"); + await assertGeneDoesNotExist(geneToAddToSet); + await clickOn("redo"); + await assertGeneExistsInGeneset(geneToAddToSet); }); test("expand gene and brush", async () => { await setup(config); @@ -243,7 +279,7 @@ describe.each([ await colorByGene(geneToBrushAndColorBy); await assertColorLegendLabel(geneToBrushAndColorBy); }); - test("delete gene from geneset", async () => { + test("delete gene from geneset and undo/redo", async () => { // We've already deleted the gene if (config.withSubset) return; @@ -252,6 +288,10 @@ describe.each([ await expandGeneset(setToRemoveFrom); await removeGene(geneToRemove); await assertGeneDoesNotExist(geneToRemove); + await clickOn("undo"); + await assertGeneExistsInGeneset(geneToRemove); + await clickOn("redo"); + await assertGeneDoesNotExist(geneToRemove); }); }); diff --git a/client/src/components/geneExpression/geneSet.tsx b/client/src/components/geneExpression/geneSet.tsx index 482659bf..bc26382e 100644 --- a/client/src/components/geneExpression/geneSet.tsx +++ b/client/src/components/geneExpression/geneSet.tsx @@ -90,6 +90,7 @@ class GeneSet extends React.Component<{}, State> { onClick={this.onGenesetMenuClick} > { - const { children, tooltipAddendum = "" } = props; + const { children, isGenesetDescription, tooltipAddendum = "" } = props; // Truncate only support a single child with a text child if ( @@ -89,9 +89,22 @@ export default (props: any) => { "aria-label": originalString, }) ); + // we need an ID to check for this content, since this is the only place the geneset description appears + const descriptionContent = ( + + {originalString} + {tooltipAddendum} + + ); return (