diff --git a/cypress/component/Dataset/dataset.json b/cypress/component/Dataset/dataset.json
new file mode 100644
index 000000000..cc2a8252f
--- /dev/null
+++ b/cypress/component/Dataset/dataset.json
@@ -0,0 +1,138 @@
+{
+ "datasetId": 1975,
+ "name": "ExteranlAccessTestJL1",
+ "datasetName": "ExteranlAccessTestJL1",
+ "createDate": "Nov 2, 2023",
+ "createUserId": 3396,
+ "updateDate": 1730999135936,
+ "updateUserId": 3351,
+ "alias": 682,
+ "datasetIdentifier": "DUOS-000682",
+ "dataUse": {
+ "generalUse": true,
+ "hmbResearch": false,
+ "diseaseRestrictions": [],
+ "populationOriginsAncestry": false,
+ "ethicsApprovalRequired": false,
+ "collaboratorRequired": true,
+ "geneticStudiesOnly": true,
+ "publicationResults": true,
+ "controls": false,
+ "population": false
+ },
+ "deletable": false,
+ "properties": [
+ {
+ "propertyId": 9311,
+ "datasetId": 1975,
+ "propertyName": "Data Location",
+ "propertyValue": "Not Determined",
+ "schemaProperty": "dataLocation",
+ "propertyType": "String"
+ },
+ {
+ "propertyId": 9312,
+ "datasetId": 1975,
+ "propertyName": "# of participants",
+ "propertyValue": 1,
+ "schemaProperty": "numberOfParticipants",
+ "propertyType": "Number"
+ },
+ {
+ "propertyId": 9313,
+ "datasetId": 1975,
+ "propertyName": "File Types",
+ "propertyValue": [
+ {}
+ ],
+ "schemaProperty": "fileTypes",
+ "propertyType": "Json"
+ }
+ ],
+ "createUser": {
+ "userId": 3396,
+ "email": "jlawson@broadinstitute.org",
+ "displayName": "Jonathan Lawson (Admin \u0026 DAC Member)",
+ "createDate": 1526056488000,
+ "emailPreference": false,
+ "institutionId": 150,
+ "eraCommonsId": "a"
+ },
+ "study": {
+ "studyId": 5854,
+ "name": "ExternalAccessTestJL1",
+ "description": "ExternalAccessTestJL1",
+ "publicVisibility": true,
+ "piName": "Dr. Make",
+ "dataTypes": [
+ "Hybrid Capture"
+ ],
+ "datasetIds": [
+ 1975,
+ 1976,
+ 1977
+ ],
+ "properties": [
+ {
+ "studyPropertyId": 5860,
+ "studyId": 5854,
+ "key": "collaboratingSites",
+ "type": "Json",
+ "value": []
+ },
+ {
+ "studyPropertyId": 5855,
+ "studyId": 5854,
+ "key": "species",
+ "type": "String",
+ "value": "ExternalAccessTestJL1"
+ },
+ {
+ "studyPropertyId": 5857,
+ "studyId": 5854,
+ "key": "dataCustodianEmail",
+ "type": "Json",
+ "value": [
+ "geraldg@spurs.bb"
+ ]
+ },
+ {
+ "studyPropertyId": 5858,
+ "studyId": 5854,
+ "key": "nihAnvilUse",
+ "type": "String",
+ "value": "I am not NHGRI funded and do not plan to store data in AnVIL"
+ },
+ {
+ "studyPropertyId": 5854,
+ "studyId": 5854,
+ "key": "phenotypeIndication",
+ "type": "String",
+ "value": "ExternalAccessTestJL1"
+ },
+ {
+ "studyPropertyId": 5859,
+ "studyId": 5854,
+ "key": "nihICsSupportingStudy",
+ "type": "Json",
+ "value": []
+ },
+ {
+ "studyPropertyId": 5853,
+ "studyId": 5854,
+ "key": "studyType",
+ "type": "String",
+ "value": "Observational"
+ },
+ {
+ "studyPropertyId": 5861,
+ "studyId": 5854,
+ "key": "alternativeDataSharingPlanReasons",
+ "type": "Json",
+ "value": []
+ }
+ ],
+ "createDate": 1698897809861,
+ "createUserId": 3396
+ }
+}
diff --git a/cypress/component/Dataset/datasetStatistics.spec.js b/cypress/component/Dataset/datasetStatistics.spec.js
new file mode 100644
index 000000000..d08f177bd
--- /dev/null
+++ b/cypress/component/Dataset/datasetStatistics.spec.js
@@ -0,0 +1,167 @@
+/* eslint-disable no-undef,no-console */
+
+import React from 'react';
+import {mount} from 'cypress/react';
+import DatasetStatistics from '../../../src/pages/DatasetStatistics';
+import dataset from './dataset.json';
+import {DataSet} from '../../../src/libs/ajax/DataSet';
+import {DatasetMetrics} from '../../../src/libs/ajax/DatasetMetrics';
+
+const externalProp = {
+ 'propertyId': 9314,
+ 'datasetId': 1975,
+ 'propertyName': 'Access Management',
+ 'propertyValue': 'external',
+ 'schemaProperty': 'accessManagement',
+ 'propertyType': 'String'
+};
+
+const openProp = {
+ 'propertyId': 9314,
+ 'datasetId': 1975,
+ 'propertyName': 'Access Management',
+ 'propertyValue': 'open',
+ 'schemaProperty': 'accessManagement',
+ 'propertyType': 'String'
+};
+
+const controlledProp = {
+ 'propertyId': 9314,
+ 'datasetId': 1975,
+ 'propertyName': 'Access Management',
+ 'propertyValue': 'controlled',
+ 'schemaProperty': 'accessManagement',
+ 'propertyType': 'String'
+};
+
+const location = {
+ 'propertyId': 12657,
+ 'datasetId': 1975,
+ 'propertyName': 'URL',
+ 'propertyValue': 'https://duos.org',
+ 'schemaProperty': 'url',
+ 'propertyType': 'String'
+};
+
+describe('Dataset Statistics Tests', () => {
+
+ it('Displays Controlled Access Dataset Apply Button', () => {
+ const controlled = Object.assign(dataset, {properties: [controlledProp]});
+ cy.viewport(600, 800);
+ cy.stub(DataSet, 'getDatasetByDatasetIdentifier').returns(Promise.resolve(controlled));
+ cy.stub(DataSet, 'getDataSetsByDatasetId').returns(Promise.resolve(controlled));
+ cy.stub(DatasetMetrics, 'getDatasetStats').returns(Promise.resolve({}));
+
+ const props = {
+ match: {
+ params: {
+ datasetIdentifier: controlled.datasetIdentifier
+ }
+ },
+ history: {
+ push() {
+ }
+ }
+ };
+ mount();
+ cy.contains(controlled.datasetIdentifier).should('exist');
+ cy.contains('Apply for Access').should('exist');
+ });
+
+ it('Displays External Access Language With Location', () => {
+ const external = Object.assign(dataset, {properties: [externalProp, location]});
+ cy.viewport(600, 800);
+ cy.stub(DataSet, 'getDatasetByDatasetIdentifier').returns(Promise.resolve(external));
+ cy.stub(DataSet, 'getDataSetsByDatasetId').returns(Promise.resolve(external));
+ cy.stub(DatasetMetrics, 'getDatasetStats').returns(Promise.resolve({}));
+
+ const props = {
+ match: {
+ params: {
+ datasetIdentifier: external.datasetIdentifier
+ }
+ },
+ history: {
+ push() {
+ }
+ }
+ };
+ mount();
+ cy.contains(external.datasetIdentifier).should('exist');
+ cy.contains('This dataset is externally managed').should('exist');
+ cy.contains('Requests cannot be made via DUOS, but must be made directly').should('exist');
+ });
+
+ it('Displays External Access Language Without Location', () => {
+ const external = Object.assign(dataset, {properties: [externalProp]});
+ cy.viewport(600, 800);
+ cy.stub(DataSet, 'getDatasetByDatasetIdentifier').returns(Promise.resolve(external));
+ cy.stub(DataSet, 'getDataSetsByDatasetId').returns(Promise.resolve(external));
+ cy.stub(DatasetMetrics, 'getDatasetStats').returns(Promise.resolve({}));
+
+ const props = {
+ match: {
+ params: {
+ datasetIdentifier: external.datasetIdentifier
+ }
+ },
+ history: {
+ push() {
+ }
+ }
+ };
+ mount();
+ cy.contains(external.datasetIdentifier).should('exist');
+ cy.contains('This dataset is externally managed').should('exist');
+ cy.contains('Requests cannot be made via DUOS, but must be made directly').should('not.exist');
+ });
+
+ it('Displays Open Access Language With Location', () => {
+ const open = Object.assign(dataset, {properties: [openProp, location]});
+ cy.viewport(600, 800);
+ cy.stub(DataSet, 'getDatasetByDatasetIdentifier').returns(Promise.resolve(open));
+ cy.stub(DataSet, 'getDataSetsByDatasetId').returns(Promise.resolve(open));
+ cy.stub(DatasetMetrics, 'getDatasetStats').returns(Promise.resolve({}));
+
+ const props = {
+ match: {
+ params: {
+ datasetIdentifier: open.datasetIdentifier
+ }
+ },
+ history: {
+ push() {
+ }
+ }
+ };
+ mount();
+ cy.contains(open.datasetIdentifier).should('exist');
+ cy.contains('This dataset is open access, does not require an access request').should('exist');
+ cy.contains('and can be accessed directly').should('exist');
+ });
+
+ it('Displays Open Access Language Without Location', () => {
+ const open = Object.assign(dataset, {properties: [openProp]});
+ cy.viewport(600, 800);
+ cy.stub(DataSet, 'getDatasetByDatasetIdentifier').returns(Promise.resolve(open));
+ cy.stub(DataSet, 'getDataSetsByDatasetId').returns(Promise.resolve(open));
+ cy.stub(DatasetMetrics, 'getDatasetStats').returns(Promise.resolve({}));
+
+ const props = {
+ match: {
+ params: {
+ datasetIdentifier: open.datasetIdentifier
+ }
+ },
+ history: {
+ push() {
+ }
+ }
+ };
+ mount();
+ cy.contains(open.datasetIdentifier).should('exist');
+ cy.contains('This dataset is open access, does not require an access request').should('exist');
+ cy.contains('and can be accessed directly').should('not.exist');
+ });
+
+});