From 3d97c7dc55565297a1ea37cbf129f98c8174711a Mon Sep 17 00:00:00 2001 From: Amandus Butzer Date: Thu, 19 Jan 2023 17:06:50 +0100 Subject: [PATCH] test: Migrate route-importer.spec.js - the tested imports were exported with the client files from other sources should be tested as well - remove old spec --- .../forms/route-importer/RouteImporter.cy.js | 62 +++++++ .../integration/specs/route-importer.spec.js | 160 ------------------ 2 files changed, 62 insertions(+), 160 deletions(-) create mode 100644 src/fragments/forms/route-importer/RouteImporter.cy.js delete mode 100755 tests/integration/specs/route-importer.spec.js diff --git a/src/fragments/forms/route-importer/RouteImporter.cy.js b/src/fragments/forms/route-importer/RouteImporter.cy.js new file mode 100644 index 00000000..d5aaec91 --- /dev/null +++ b/src/fragments/forms/route-importer/RouteImporter.cy.js @@ -0,0 +1,62 @@ +import RouteImporter from './RouteImporter.vue' +import I18nBuilder from '@/i18n/i18n-builder' +import store from '@/store/store' + +describe('', () => { + it('renders', () => { + cy.mount(RouteImporter, {i18n: I18nBuilder.build(), store: store}) + cy.get('.route-importer-container') + cy.get('.route-importer-btn button').click() + cy.get('.route-importer-modal') + cy.get('#dropzone') + }) + context('file imports', () => { + beforeEach(() => { + cy.mount(RouteImporter, {i18n: I18nBuilder.build(), store: store}) + cy.spy(RouteImporter.methods, 'fileAdded').as('fileAddedSpy') + cy.spy(RouteImporter.methods, 'sendDataToMap').as('sendDataToMapSpy') + cy.get('.route-importer-btn button').click() + }) + + afterEach(() => { + cy.get('.route-importer-modal').should('not.exist') + cy.get('@fileAddedSpy').should('have.been.calledOnce') + cy.get('@sendDataToMapSpy').should('have.been.calledOnce') + }) + + it('imports .geojson route file', () => { + cy.fixture('ors-route.geojson', {encoding: null}).as('geojsonRoute') + cy.get('#dropzone').selectFile('@geojsonRoute', { + action: 'drag-drop' + }) + }) + + it('imports .json route file', () => { + cy.fixture('ors-route.json', {encoding: null}).as('jsonRoute') + cy.get('#dropzone').selectFile('@jsonRoute', { + action: 'drag-drop' + }) + }) + + it('imports .gpx route file', () => { + cy.fixture('ors-route.gpx', {encoding: null}).as('gpxRoute') + cy.get('#dropzone').selectFile('@gpxRoute', { + action: 'drag-drop' + }) + }) + + it('imports .kml route file', () => { + cy.fixture('ors-route.kml', {encoding: null}).as('kmlRoute') + cy.get('#dropzone').selectFile('@kmlRoute', { + action: 'drag-drop' + }) + }) + + it('imports .txt route file file with valid xml', () => { + cy.fixture('ors-route.xml.txt', {encoding: null}).as('xmlTxtRoute') + cy.get('#dropzone').selectFile('@xmlTxtRoute', { + action: 'drag-drop' + }) + }) + }) +}) diff --git a/tests/integration/specs/route-importer.spec.js b/tests/integration/specs/route-importer.spec.js deleted file mode 100755 index 9a258052..00000000 --- a/tests/integration/specs/route-importer.spec.js +++ /dev/null @@ -1,160 +0,0 @@ -import RouteImporter from '@/fragments/forms/route-importer/RouteImporter.vue' -import I18nBuilder from '@/i18n/i18n-builder' -import { mount } from '@vue/test-utils' -import AppLoader from '@/app-loader' -import store from '@/store/store' - -// importing files -import orsRouteGeojson from '../mockups/ors-route.geojson' -import orsRouteJson from '../mockups/ors-route.json' -import orsRouteGpx from '../mockups/ors-route.gpx' -import orsRouteKml from '../mockups/ors-route.kml' -import orsRouteXmlTxt from '../mockups/ors-route.xml.txt' - - -// Solves the 'RegeneratorRuntime is not defined' issue according to -// https://stackoverflow.com/questions/28976748/regeneratorruntime-is-not-defined -import '@babel/polyfill' - -describe('Route-importer', () => { - it('should import geojson route', async () => { - await new AppLoader().fetchApiInitialData() - const wrapper = mount(RouteImporter, {i18n: I18nBuilder.build(), store: store }) - - expect(wrapper.find('.route-importer-container').exists()).toBe(true) - expect(wrapper.findComponent(RouteImporter).exists()).toBe(true) - - await wrapper.find('.route-importer-btn button').trigger('click') - await new Promise(resolve => setTimeout(resolve, 2000)) - - let importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeDefined() - expect(importerModal).not.toBeNull() - - const dataTransfer = new DataTransfer() - const aFileParts = [orsRouteGeojson] - dataTransfer.items.add(new File([new Blob(aFileParts, { type: 'application/geo+json' })], 'ors-route.geojson')) - - let dropzone = document.querySelector('#dropzone') - expect(dropzone).toBeDefined() - expect(dropzone).not.toBeNull() - dropzone.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer})) - - await new Promise(resolve => setTimeout(resolve, 4000)) - importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeNull() - }) - - it('should import JSON route', async () => { - await new AppLoader().fetchApiInitialData() - const wrapper = mount(RouteImporter, {i18n: I18nBuilder.build(), store: store }) - - expect(wrapper.find('.route-importer-container').exists()).toBe(true) - expect(wrapper.findComponent(RouteImporter).exists()).toBe(true) - - await wrapper.find('.route-importer-btn button').trigger('click') - await new Promise(resolve => setTimeout(resolve, 2000)) - - let importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeDefined() - expect(importerModal).not.toBeNull() - - const dataTransfer = new DataTransfer() - const aFileParts = [JSON.stringify(orsRouteJson)] - dataTransfer.items.add(new File([new Blob(aFileParts, { type: 'application/json' })], 'ors-route.json')) - - let dropzone = document.querySelector('#dropzone') - expect(dropzone).toBeDefined() - expect(dropzone).not.toBeNull() - dropzone.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer})) - - await wrapper.vm.$nextTick() - await new Promise(resolve => setTimeout(resolve, 3000)) - importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeNull() - }) - - it('should import GPX route', async () => { - await new AppLoader().fetchApiInitialData() - const wrapper = mount(RouteImporter, {i18n: I18nBuilder.build(), store: store }) - - expect(wrapper.find('.route-importer-container').exists()).toBe(true) - expect(wrapper.findComponent(RouteImporter).exists()).toBe(true) - - await wrapper.find('.route-importer-btn button').trigger('click') - await new Promise(resolve => setTimeout(resolve, 2000)) - - let importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeDefined() - expect(importerModal).not.toBeNull() - - const dataTransfer = new DataTransfer() - const aFileParts = [orsRouteGpx] - dataTransfer.items.add(new File([new Blob(aFileParts, { type: 'application/gpx+xml' })], 'ors-route.gpx')) - - let dropzone = document.querySelector('#dropzone') - expect(dropzone).toBeDefined() - expect(dropzone).not.toBeNull() - dropzone.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer})) - - await new Promise(resolve => setTimeout(resolve, 2000)) - importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeNull() - }) - - it('should import KML route', async () => { - await new AppLoader().fetchApiInitialData() - const wrapper = mount(RouteImporter, {i18n: I18nBuilder.build(), store: store }) - - expect(wrapper.find('.route-importer-container').exists()).toBe(true) - expect(wrapper.findComponent(RouteImporter).exists()).toBe(true) - - await wrapper.find('.route-importer-btn button').trigger('click') - await new Promise(resolve => setTimeout(resolve, 2000)) - - let importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeDefined() - expect(importerModal).not.toBeNull() - - const dataTransfer = new DataTransfer() - const aFileParts = [orsRouteKml] - dataTransfer.items.add(new File([new Blob(aFileParts, { type: 'application/vnd.google-earth.kml+xml' })], 'ors-route.kml')) - - let dropzone = document.querySelector('#dropzone') - expect(dropzone).toBeDefined() - expect(dropzone).not.toBeNull() - dropzone.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer})) - - await new Promise(resolve => setTimeout(resolve, 2000)) - importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeNull() - }) - - it('should import txt file with valid xml', async () => { - await new AppLoader().fetchApiInitialData() - const wrapper = mount(RouteImporter, {i18n: I18nBuilder.build(), store: store }) - - expect(wrapper.find('.route-importer-container').exists()).toBe(true) - expect(wrapper.findComponent(RouteImporter).exists()).toBe(true) - - await wrapper.find('.route-importer-btn button').trigger('click') - await new Promise(resolve => setTimeout(resolve, 2000)) - - let importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeDefined() - expect(importerModal).not.toBeNull() - - const dataTransfer = new DataTransfer() - const aFileParts = [orsRouteXmlTxt] - dataTransfer.items.add(new File([new Blob(aFileParts, { type: 'text/plain' })], 'ors-route.xml.txt')) - - let dropzone = document.querySelector('#dropzone') - expect(dropzone).toBeDefined() - expect(dropzone).not.toBeNull() - dropzone.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer})) - - await new Promise(resolve => setTimeout(resolve, 2000)) - importerModal = document.querySelector('.route-importer-modal') - expect(importerModal).toBeNull() - }) -})