graphdb-workbench-tests 2.3.0-TR3 → 2.3.0-TR4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cypress-flaky.config.js +1 -1
- package/cypress-reporter-config.json +6 -0
- package/cypress.config.js +6 -2
- package/fixtures/locale-en.json +216 -56
- package/integration/repository/repositories.spec.js +117 -112
- package/integration/sparql/sparql-language-change.spec.js +22 -0
- package/package.json +5 -2
- package/plugins/index.js +16 -0
- package/support/commands.js +7 -5
package/cypress-flaky.config.js
CHANGED
package/cypress.config.js
CHANGED
|
@@ -5,7 +5,7 @@ module.exports = defineConfig({
|
|
|
5
5
|
fixturesFolder: 'fixtures',
|
|
6
6
|
screenshotsFolder: 'report/screenshots',
|
|
7
7
|
videosFolder: 'report/videos',
|
|
8
|
-
video:
|
|
8
|
+
video: true,
|
|
9
9
|
defaultCommandTimeout: 15000,
|
|
10
10
|
numTestsKeptInMemory: 10,
|
|
11
11
|
e2e: {
|
|
@@ -16,6 +16,10 @@ module.exports = defineConfig({
|
|
|
16
16
|
},
|
|
17
17
|
baseUrl: 'http://localhost:9000',
|
|
18
18
|
specPattern: 'integration/**/*.{js,jsx,ts,tsx}',
|
|
19
|
-
supportFile: 'support/index.js'
|
|
19
|
+
supportFile: 'support/index.js',
|
|
20
|
+
reporter: "cypress-multi-reporters",
|
|
21
|
+
reporterOptions: {
|
|
22
|
+
configFile: 'cypress-reporter-config.json'
|
|
23
|
+
}
|
|
20
24
|
}
|
|
21
25
|
});
|
package/fixtures/locale-en.json
CHANGED
|
@@ -186,6 +186,8 @@
|
|
|
186
186
|
"lifetime.label": "lifetime",
|
|
187
187
|
"state.label": "state",
|
|
188
188
|
"download.btn": "Download",
|
|
189
|
+
"skip.btn": "Skip",
|
|
190
|
+
"back.to.guides.btn": "Back to the guides",
|
|
189
191
|
"show.remaining": "Show remaining",
|
|
190
192
|
"characters.label": "characters",
|
|
191
193
|
"show.first.chars": "Show first 500 characters",
|
|
@@ -198,14 +200,12 @@
|
|
|
198
200
|
"abort.query": "Abort query",
|
|
199
201
|
"abort.update": "Abort update",
|
|
200
202
|
"no.running.queries.updates": "No running queries or updates.",
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"system.cpu.load": "System CPU Load",
|
|
208
|
-
"loaded.classes.count": "Loaded Classes Count",
|
|
203
|
+
"monitor.resource": "Resource monitoring",
|
|
204
|
+
"monitor.performance.label": "Performance",
|
|
205
|
+
"monitor.performance.no_repository": "Charts are not available because you are not connected to any repository",
|
|
206
|
+
"monitor.cluster.no_cluster": "Charts are not available because GraphDB is not in cluster configuration",
|
|
207
|
+
"monitor.cluster": "Cluster health",
|
|
208
|
+
"monitor.retrying": "Retries: {{retry}}",
|
|
209
209
|
"access.to.url.restricted": "Access to the requested URL is restricted!",
|
|
210
210
|
"autocomplete.not.supported": "Autocomplete not fully supported",
|
|
211
211
|
"autocomplete.config.not.supported": "Configuring autocomplete is not supported.",
|
|
@@ -459,49 +459,95 @@
|
|
|
459
459
|
"security.new.password": "New password",
|
|
460
460
|
"security.save.admin.settings": "Save administrator settings",
|
|
461
461
|
"security.admin.pass.unset": "If you unset the password and then enable security, this administrator will not be able to log into GraphDB through the workbench. Are you sure that you want to continue?",
|
|
462
|
-
"resource.
|
|
463
|
-
"resource.system.
|
|
464
|
-
"resource.
|
|
465
|
-
"resource.
|
|
462
|
+
"resource.no_data": "No data available",
|
|
463
|
+
"resource.system.cpu_load.label": "System CPU load",
|
|
464
|
+
"resource.system.cpu_load.tooltip": "Shows the current CPU load in %. The load indicates the overall CPU load of the machine and not just GraphDB",
|
|
465
|
+
"resource.system.file_descriptors.label": "File descriptors",
|
|
466
|
+
"resource.system.file_descriptors.tooltip": "Shows the currently open file descriptors. Having more active repositories or running operations increases the number. There should always be free descriptors to handle new requests. If the number grows but doesn’t shrink once the operations that need the descriptors are complete, it may indicate an issue with GraphDB",
|
|
467
|
+
"resource.system.file_descriptors.open": "Open file descriptors",
|
|
468
|
+
"resource.system.file_descriptors.max": "Max file descriptors: {{max}}",
|
|
469
|
+
"resource.system.file_descriptors.only_unix": "Available only for UNIX based systems",
|
|
470
|
+
"resource.memory.heap.label": "Heap memory usage",
|
|
471
|
+
"resource.memory.heap.tooltip": "Shows the heap memory used by GraphDB. The heap memory is the main memory allocated for keeping the database running and it is also used for any memory-intensive operations when needed. Approaching the maximum heap size can slow down GraphDB",
|
|
472
|
+
"resource.memory.heap.max": "Maximum heap size: ",
|
|
473
|
+
"resource.memory.non_heap.label": "Off-heap memory usage",
|
|
474
|
+
"resource.memory.non_heap.tooltip": "Shows the off-heap memory used by GraphDB. The off-heap memory is used only for certain structures and should not grow substantially with time",
|
|
475
|
+
"resource.memory.committed": "Committed memory",
|
|
476
|
+
"resource.memory.used": "Used memory",
|
|
477
|
+
"resource.storage.label": "Disk storage",
|
|
478
|
+
"resource.storage.tooltip": "Shows the used/free disk storage space in three key GraphDB directories – the data directory, the work directory and the logs directory. If any of the directories runs out of space, GraphDB may stop operating normally",
|
|
479
|
+
"resource.storage.used": "Used",
|
|
480
|
+
"resource.storage.free": "Free",
|
|
481
|
+
"resource.storage.work": "Work",
|
|
482
|
+
"resource.storage.data": "Data",
|
|
483
|
+
"resource.storage.logs": "Logs",
|
|
484
|
+
"resource.storage.subtitle.data": "Data: ",
|
|
485
|
+
"resource.storage.subtitle.work": "Work: ",
|
|
486
|
+
"resource.storage.subtitle.logs": "Logs: ",
|
|
487
|
+
"resource.epool.label": "Entity pool",
|
|
488
|
+
"resource.epool.tooltip": "Shows GraphDB’s entity pool reads and writes count for the current repository. This metric can be used to diagnose a small or oversized entity pool",
|
|
489
|
+
"resource.epool.reads": "Reads",
|
|
490
|
+
"resource.epool.writes": "Writes",
|
|
491
|
+
"resource.epool.size": "Size",
|
|
492
|
+
"resource.queries.label": "Queries",
|
|
493
|
+
"resource.queries.tooltip": "Shows the number of active queries or updates in the current repository. The number will grow with each running query or update and decrease when the query or update completes. In addition, the graphics reports the total number of slow and suboptimal queries since the repository was initialized. Having a large number of slow queries may indicate insufficient system resources or simply queries that need some time to execute. Suboptimal queries are those queries that were evaluated using a fallback RDF4J strategy and normally should not occur",
|
|
494
|
+
"resource.queries.running": "Running queries",
|
|
495
|
+
"resource.queries.slow": "Slow queries: ",
|
|
496
|
+
"resource.queries.suboptimal": "Suboptimal queries: ",
|
|
497
|
+
"resource.connections.label": "Transactions and Connections",
|
|
498
|
+
"resource.connections.tooltip": "Shows the number of active transactions and open repository connections. The number of transactions and connections varies according to load. If there is no perceived use but the numbers stay above zero, it may indicate an issue with a client not disposing of a transaction properly",
|
|
499
|
+
"resource.connections.active": "Active transactions",
|
|
500
|
+
"resource.connections.open": "Open connections",
|
|
501
|
+
"resources.global_cache.label": "Global cache",
|
|
502
|
+
"resources.global_cache.tooltip": "Shows GraphDB’s global page cache hits and miss count. This metric can be used to diagnose a small or oversized cache size. Ideally, the % of hits should be over 96%. If it’s below that, it might be a good idea to increase the cache size. If it’s over 99%, it might be worth experimenting with a smaller size. Note that the global page cache is shared across all active repositories",
|
|
503
|
+
"resources.global_cache.hits": "Hit",
|
|
504
|
+
"resources.global_cache.miss": "Miss",
|
|
505
|
+
"resources.cluster_health.label": "Cluster health",
|
|
506
|
+
"resources.cluster_health.tooltip": "Shows the overall health of the GraphDB cluster. A healthy cluster has most of its nodes “in sync”, a low number of leader elections and a very low number of recoveries and failed transactions. If you observe different behavior, it may indicate issues with the network, hardware or setup",
|
|
507
|
+
"resources.cluster_health.in_sync": "In sync",
|
|
508
|
+
"resources.cluster_health.out_sync": "Out of sync",
|
|
509
|
+
"resources.cluster_health.syncing": "Syncing",
|
|
510
|
+
"resources.cluster_health.disconnected": "Disconnected",
|
|
511
|
+
"resource.cluster_health.leader_elections": "Leader elections: ",
|
|
512
|
+
"resource.cluster_health.recoveries": "Recoveries: ",
|
|
513
|
+
"resource.cluster_health.failed_transactions": "Failed transactions: ",
|
|
466
514
|
"view.autocomplete.title": "Autocomplete index",
|
|
467
|
-
"view.autocomplete.helpInfo": "The Autocomplete index is used for automatic completion of
|
|
515
|
+
"view.autocomplete.helpInfo": "The Autocomplete index is used for automatic completion of IRIs in the SPARQL editor and the View resource page. Use this view to enable or disable the index and check its status.",
|
|
468
516
|
"view.clusterManagement.title": "Cluster management",
|
|
469
517
|
"view.clusterManagement.create.title": "Create cluster",
|
|
470
518
|
"view.clusterManagement.edit.title": "Edit cluster",
|
|
471
|
-
"view.clusterManagement.helpInfo": "The Cluster management view is a visual administration tool for the GraphDB cluster. Here you can create, modify and delete a cluster or
|
|
519
|
+
"view.clusterManagement.helpInfo": "The Cluster management view is a visual administration tool for the GraphDB cluster. Here you can create, modify and delete a cluster, or monitor the state of a running cluster in near real-time.",
|
|
472
520
|
"view.resource.title": "Resource",
|
|
473
|
-
"view.export.ctr.helpInfo": "Graphs overview provides a list of the default graph and all named graphs in GraphDB. It can be used to inspect the statements in each graph, export the graph or clear the graph's data.",
|
|
521
|
+
"view.export.ctr.helpInfo": "Graphs overview provides a list of the default graph and all named graphs in a GraphDB repository. It can be used to inspect the statements in each graph, export the graph or clear the graph's data.",
|
|
474
522
|
"view.connector.management.title": "Connector management",
|
|
475
|
-
"view.connector.management.helpInfo": "The Connector management view is used to create and
|
|
523
|
+
"view.connector.management.helpInfo": "The Connector management view is used to create, manage and view GraphDB connector instances.",
|
|
476
524
|
"view.class.hierarchy.title": "Class hierarchy",
|
|
477
525
|
"view.class.hierarchy.helpInfo": "The Class hierarchy view shows the hierarchy of RDF classes by the number of instances. The biggest circles are the parent classes, and the smaller nested ones are their subclasses. Hover over a given class to see its subclasses or zoom in a nested circle (RDF class) for further exploration.",
|
|
478
526
|
"view.domain.range.graph.title": "Domain-Range graph",
|
|
479
|
-
"view.domain.range.graph.helpInfo": "
|
|
527
|
+
"view.domain.range.graph.helpInfo": "The Domain-Range graph view shows the classes and properties that lead to or from a given RDF class. The possible subject types of a property (shown on the left of the property) are the <b>domain</b>, while the possible object types of a property (shown on the right) are the <b>range</b> of that property. You can navigate to another class by double clicking on it.",
|
|
480
528
|
"view.class.relationships.title": "Class relationships",
|
|
481
529
|
"view.class.relationships.helpInfo": "The Class relationships view shows the relationships between RDF classes, where a relationship is represented by links between the individual instances of two classes. Each link is an RDF statement where the subject is an instance of one class, the object is an instance of another class, and the link is the predicate. Depending on the number of links between the instances of two classes, the bundle can be thicker or thinner, and it receives the colour of the class with more incoming links. The links can be in both directions.",
|
|
482
|
-
"view.visual.graph.helpInfo": "
|
|
530
|
+
"view.visual.graph.helpInfo": "The Visual graph view provides a visual representation of parts of the RDF graph. The visualisation starts from a single resource and the resources connected to it or from a graph query result. Double-click on resources to expand the graph with their connections.",
|
|
483
531
|
"view.create.visual.graph.title": "Create visual graph config",
|
|
484
532
|
"view.create.visual.graph.helpInfo": "A visual graph config defines the SPARQL queries used to retrieve nodes and edges in the visual graph, as well as the starting point of visualisation.",
|
|
485
|
-
"view.import.helpInfo": "The Import view allows you to import RDF data into GraphDB. Import data from local files, from files on the server where
|
|
533
|
+
"view.import.helpInfo": "The Import view allows you to import RDF data into a GraphDB repository. Import data from local files, from files on the server where GraphDB is running, from a remote URL, or by pasting the RDF data as a text snippet. Each import method supports various RDF serialisation formats.",
|
|
486
534
|
"view.jdbc.title": "JDBC configuration",
|
|
487
|
-
"view.jdbc.helpInfo": "JDBC
|
|
535
|
+
"view.jdbc.helpInfo": "The JDBC configuration view allows you to configure, store, update, preview, and delete virtual SQL tables. These tables can then be used with the Avatica JDBC driver. Each virtual SQL table is based on a SPARQL SELECT query and requires additional metadata for the definition of the SQL columns.",
|
|
488
536
|
"view.jdbc.create.title": "SQL table configuration",
|
|
489
|
-
"view.jdbc.create.helpInfo": "
|
|
537
|
+
"view.jdbc.create.helpInfo": "The SQL table configuration view is used to define a virtual SQL table. Each table must have a name, a SPARQL SELECT query, and a set of SQL column definitions.",
|
|
490
538
|
"jdbc.column.names.constraint": "Column names must be placed in array.",
|
|
491
|
-
"view.namespaces.helpInfo": "The Namespaces view provides an overview of all namespaces
|
|
492
|
-
"view.ontoRefine.title": "OntoRefine",
|
|
493
|
-
"view.ontoRefine.helpInfo": "GraphDB OntoRefine is a data transformation tool, based on OpenRefine and integrated in GraphDB Workbench, for converting tabular data into RDF and importing it into a GraphDB repository, using simple SPARQL queries and a virtual endpoint. The supported formats are TSV, CSV, *SV, Excel (.xls and. xlsx), JSON, XML, RDF as XML, and Google sheet. Using OntoRefine you can easily filter your data, edit the inconsistencies, convert it into RDF, and import it into your repository.",
|
|
539
|
+
"view.namespaces.helpInfo": "The Namespaces view provides an overview of all namespaces defined in a GraphDB repository. Namespaces are essentially shorthand notations for IRIs. Here you can add, remove and modify them.",
|
|
494
540
|
"view.query.and.update.monitoring.title": "Query and Update monitoring",
|
|
495
|
-
"view.query.and.update.monitoring.helpInfo": "The Queries and Updates monitoring view shows all running queries
|
|
541
|
+
"view.query.and.update.monitoring.helpInfo": "The Queries and Updates monitoring view shows all running queries and updates in a GraphDB repository. A query or update can be terminated by pressing the Abort button.",
|
|
496
542
|
"view.rdf.rank.title": "RDF Rank",
|
|
497
|
-
"view.rdf.rank.helpInfo": "RDF Rank is an algorithm that identifies the
|
|
498
|
-
"view.repositories.helpInfo": "The Repositories view is used to
|
|
543
|
+
"view.rdf.rank.helpInfo": "RDF Rank is an algorithm that identifies the most important or popular entities in the repository by examining their interconnectedness. The popularity of the entities can be used to order the query results. Use this view to configure the RDF rank, recompute it or check the current state.",
|
|
544
|
+
"view.repositories.helpInfo": "The Repositories view is used to create, modify and delete repositories and connections to remote GraphDB instances (also known as remote locations).",
|
|
499
545
|
"view.choose.repo.title": "Select Repository Type",
|
|
500
546
|
"view.create.repo.title": "Create {{repoType}} repository",
|
|
501
547
|
"view.edit.repo.title": "Edit Repository: {{repositoryId}}",
|
|
502
|
-
"view.resource.monitoring.title": "
|
|
503
|
-
"view.resource.monitoring.helpInfo": "The
|
|
504
|
-
"view.users.access.helpInfo": "The Users and Access view is used to manage the users and their access to the GraphDB repositories. You can also enable or disable the security of the entire
|
|
548
|
+
"view.resource.monitoring.title": "System monitoring",
|
|
549
|
+
"view.resource.monitoring.helpInfo": "The System monitoring view shows the usage of various system resources, such as memory, CPU, file descriptors, and storage space. It also shows some performance metrics that allow you to diagnose various issues, as well as an overview of the cluster health",
|
|
550
|
+
"view.users.access.helpInfo": "The Users and Access view is used to manage the users and their access to the GraphDB repositories. You can also enable or disable the security of the entire GraphDB. When security is disabled, everyone has full access to the repositories and the admin functionality.",
|
|
505
551
|
"view.create.user.title": "Create new user",
|
|
506
552
|
"view.edit.user.title": "Edit user: {{userId}}",
|
|
507
553
|
"view.login.title": "Login",
|
|
@@ -509,27 +555,36 @@
|
|
|
509
555
|
"view.access.denied.title": "Access Denied",
|
|
510
556
|
"view.roles.mapping.title": "Roles per Request Mapping",
|
|
511
557
|
"view.register.license.title": "Register GraphDB License",
|
|
512
|
-
"view.register.license.helpInfo": "The Register GraphDB
|
|
513
|
-
"view.existing.license.title": "Current license
|
|
514
|
-
"view.existing.license.helpInfo": "The GraphDB
|
|
558
|
+
"view.register.license.helpInfo": "The Register GraphDB license view is used to set a new GraphDB license. Upload the binary license or copy the license text in the designated text area.",
|
|
559
|
+
"view.existing.license.title": "Current GraphDB license",
|
|
560
|
+
"view.existing.license.helpInfo": "The Current GraphDB license view allows you to check the details of your current GraphDB license, as well as set a new license.",
|
|
515
561
|
"view.similarity.indexes.title": "Similarity indexes",
|
|
516
|
-
"view.similarity.indexes.helpInfo": "Similarity indexes help you look up semantically similar entities and text.",
|
|
562
|
+
"view.similarity.indexes.helpInfo": "Similarity indexes help you look up semantically similar entities and text. Use this view to create, manage and view similarity indexes.",
|
|
517
563
|
"view.create.similarity.index.title": "Create similarity index",
|
|
518
|
-
"view.create.similarity.index.helpInfo": "Index name and select query are required.
|
|
564
|
+
"view.create.similarity.index.helpInfo": "Index name and select query are required. Semantic Vectors parameters are optional.",
|
|
519
565
|
"view.sparql.title": "SPARQL Query & Update",
|
|
520
|
-
"view.sparql.helpInfo": "The SPARQL Query & Update view is a unified editor for queries and updates.
|
|
566
|
+
"view.sparql.helpInfo": "The SPARQL Query & Update view is a unified editor for queries and updates. Enter any SPARQL query or update and click Run to execute it. The view also allows you to save queries for future retrieval and execution in the SPARQL editor.",
|
|
521
567
|
"view.sparql.template.title": "SPARQL Templates",
|
|
522
|
-
"view.sparql.template.helpInfo": "
|
|
568
|
+
"view.sparql.template.helpInfo": "The SPARQL Templates view is used to create, edit and delete SPARQL templates. The templates can be used to automate complex updates, either directly or via the Kafka Sink connector.",
|
|
523
569
|
"view.create.sparql.template.title": "Create SPARQL Templates",
|
|
524
|
-
"view.create.sparql.template.helpInfo": "SPARQL
|
|
570
|
+
"view.create.sparql.template.helpInfo": "This view is used to define a single SPARQL template. The template consists of an IRI identifying the template and a SPARQL update that will be executed when the template is invoked.",
|
|
525
571
|
"view.system.information.title": "System information",
|
|
526
|
-
"view.system.information.helpInfo": "The System information view shows the configuration values of the JVM running
|
|
572
|
+
"view.system.information.helpInfo": "The System information view shows the configuration values of the JVM running GraphDB, and provides an easy mechanism to generate a detailed server report file that includes useful debugging information.",
|
|
527
573
|
"view.rest.api.documentation.title": "REST API documentation",
|
|
528
|
-
"view.rest.api.documentation.helpInfo": "The REST API view documents the available public
|
|
574
|
+
"view.rest.api.documentation.helpInfo": "The REST API view documents the available public REST API endpoints and provides an interactive interface to execute REST requests.",
|
|
575
|
+
"view.guides.title": "Interactive guides",
|
|
576
|
+
"view.guides.table.column.name": "Guide name",
|
|
577
|
+
"view.guides.table.column.level": "Guide level",
|
|
578
|
+
"view.guides.table.column.action": "Action",
|
|
579
|
+
"view.guides.level.beginner": "Beginner",
|
|
580
|
+
"view.guides.level.intermediate": "Intermediate",
|
|
581
|
+
"view.guides.level.advanced": "Advanced",
|
|
582
|
+
"view.guides.action.start": "Run the guide",
|
|
583
|
+
"view.guides.helpInfo": "The Interactive guides view provides a set of interactive guides that will lead you through various GraphDB functionalities using the Workbench user interface.",
|
|
584
|
+
"view.guides.guides.per.page.label": "Guides per page:",
|
|
529
585
|
"collapse.menu.title": "Collapse menu",
|
|
530
|
-
"view.plugins.helpInfo": "
|
|
586
|
+
"view.plugins.helpInfo": "The Plugins view is used to activate or deactivate plugins at the lowest level. Normally, all plugins should be active. If you need to enable, disable or configure functionality provided by a plugin, use the respective plugin view (e.g., the RDF Rank view) or SPARQL queries instead.",
|
|
531
587
|
"menu.rdf.label": "RDF",
|
|
532
|
-
"menu.ontoRefine.label": "Tabular (OntoRefine)",
|
|
533
588
|
"menu.explore.label": "Explore",
|
|
534
589
|
"menu.graphs.overview.label": "Graphs overview",
|
|
535
590
|
"menu.class.relationships.label": "Class relationships",
|
|
@@ -543,7 +598,7 @@
|
|
|
543
598
|
"menu.ftsStringLiteralsIndex.label": "FTS index for xsd:string literals",
|
|
544
599
|
"menu.ftsIrisIndex.label": "FTS index for full-text indexing of IRIs",
|
|
545
600
|
"menu.ftsDefaultAnalyzer.label": "Analyzer for the default index",
|
|
546
|
-
"menu.resources.label": "
|
|
601
|
+
"menu.resources.label": "System",
|
|
547
602
|
"menu.setup.label": "Setup",
|
|
548
603
|
"menu.repositories.label": "Repositories",
|
|
549
604
|
"menu.users.and.access.label": "Users and Access",
|
|
@@ -561,6 +616,7 @@
|
|
|
561
616
|
"menu.documentation.label": "Documentation",
|
|
562
617
|
"menu.developer.hub.label": "Developer Hub",
|
|
563
618
|
"menu.support.label": "Support",
|
|
619
|
+
"menu.guides.label": "Interactive guides",
|
|
564
620
|
"menu.plugins.label": "Plugins",
|
|
565
621
|
"core.popover.get.url.query": "Get URL to query",
|
|
566
622
|
"core.popover.shared.query.warning": "Query shared by another user. You may not edit or delete it.",
|
|
@@ -901,6 +957,9 @@
|
|
|
901
957
|
"ontop.repo.missing.required.file.error": "Missing required ontop repo file",
|
|
902
958
|
"ontop.repo.successful.connection.msg": "Connection is successful",
|
|
903
959
|
"ontop.repo.failed.to.connect": "Failed to connect",
|
|
960
|
+
"ontop.repo.properties.label": "Additional Ontop/JDBC properties",
|
|
961
|
+
"ontop.repo.properties.tooltip": "Allows to specify additional Ontop/JDBC properties",
|
|
962
|
+
"ontop.repo.properties.placeholder": "# Ontop/JDBC properties in properties file format",
|
|
904
963
|
"missing.required.field.error": "Missing required field",
|
|
905
964
|
"restart.repo.check.tooltip": "Check to restart the repository and apply the changes.",
|
|
906
965
|
"restart.repo.label": "Restart repository",
|
|
@@ -919,9 +978,9 @@
|
|
|
919
978
|
"location.change.confirm": "Confirm location change",
|
|
920
979
|
"location.change.confirm.warning": "Are you sure you want to change the location?",
|
|
921
980
|
"location.label": "Location:",
|
|
922
|
-
"delete.repo.warning.msg": "<p>Are you sure you want to delete the repository <strong>{{repositoryId}}</strong>?</p><p><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
981
|
+
"delete.repo.warning.msg": "<p>Are you sure you want to delete the repository <strong>{{repositoryId}}</strong>?</p><p><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span>All data in the repository will be lost.</p>",
|
|
923
982
|
"confirm.restart.repo": "Confirm restart",
|
|
924
|
-
"confirm.restart.repo.warning.msg": "<p>Are you sure you want to restart the repository <strong>{{repositoryId}}</strong>?</p><p><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
983
|
+
"confirm.restart.repo.warning.msg": "<p>Are you sure you want to restart the repository <strong>{{repositoryId}}</strong>?</p><p><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span>The repository will be shut down immediately and all running queries and updates will be cancelled.</p>",
|
|
925
984
|
"location.cannot.be.empty.error": "Location cannot be empty",
|
|
926
985
|
"required.field": "This field is required",
|
|
927
986
|
"created.repo.success.msg": "The repository {{repoId}} has been created.",
|
|
@@ -932,9 +991,9 @@
|
|
|
932
991
|
"edit.repo.error.not.exists": "Repo with name <b>{{repositoryId}}</b> doesn't exists",
|
|
933
992
|
"edit.repo.success.msg": "The repository {{saveId}} has been edited.",
|
|
934
993
|
"edit.repo.save.changes.msg": "Save changes to repository <strong>{{repoId}}</strong>?<br><br>",
|
|
935
|
-
"edit.repo.rename.changes.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
936
|
-
"edit.repo.restart.requested.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
937
|
-
"edit.repo.restart.needed.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
994
|
+
"edit.repo.rename.changes.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span>The repository will be stopped and renamed.",
|
|
995
|
+
"edit.repo.restart.requested.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span>The repository will be restarted.",
|
|
996
|
+
"edit.repo.restart.needed.msg": "<span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span>Repository restart required for changes to take effect.",
|
|
938
997
|
"edit.repo.id.warning.msg": "<p>Changing the repository ID is a dangerous operation since it renames the repository folder and enforces repository shutdown.</p>",
|
|
939
998
|
"edit.repo.id.cluster.warning.msg": "<p>If your repository is in a cluster, it is your responsibility to update the cluster after renaming.</p>",
|
|
940
999
|
"confirm.enable.edit": "Confirm enable edit",
|
|
@@ -947,7 +1006,7 @@
|
|
|
947
1006
|
"repoTooltips.ruleset": "Sets of axiomatic triples, consistency checks and entailment rules, which determine the applied semantics with a PIE file.",
|
|
948
1007
|
"repoTooltips.rulesetWarnings.needsSameAs": "Disabling owl:sameAs for this ruleset may cause incomplete inference with owl:sameAs statements.",
|
|
949
1008
|
"repoTooltips.rulesetWarnings.doesntNeedSameAs": "This ruleset does not need owl:sameAs, consider disabling it.",
|
|
950
|
-
"repoTooltips.rulesetWarnings.customRuleset": "If the custom ruleset does not use owl:sameAs, consider disabling it.
|
|
1009
|
+
"repoTooltips.rulesetWarnings.customRuleset": "If the custom ruleset does not use owl:sameAs, consider disabling it. \nIf the ruleset uses owl:sameAs, disabling it may cause incomplete inference with owl:sameAs statements.",
|
|
951
1010
|
"repoTooltips.disableSameAs": "GraphDB uses a non-rule implementation of owl:sameAs, which can be enabled or disabled independently of the ruleset.",
|
|
952
1011
|
"repoTooltips.checkForInconsistencies": "Enables the consistency checks from the ruleset.",
|
|
953
1012
|
"repoTooltips.isShacl": "Enables support for SHACL validation.",
|
|
@@ -962,7 +1021,8 @@
|
|
|
962
1021
|
"repoTooltips.shaclOptions.performanceLogging": "Log (INFO) the execution time per shape. It is recommended to disable parallel validation and caching of select nodes when this is enabled.",
|
|
963
1022
|
"repoTooltips.shaclOptions.eclipseRdf4jShaclExtensions": "Activates RDF4J's SHACL extensions that provide additional functionality (experimental).",
|
|
964
1023
|
"repoTooltips.shaclOptions.dashDataShapes": "Activates DASH Data Shapes extensions that provide additional functionality (experimental).",
|
|
965
|
-
"repoTooltips.
|
|
1024
|
+
"repoTooltips.shaclOptions.shapesGraph": "Sets the named graphs where SHACL shapes can be stored. The list is comma-delimited.",
|
|
1025
|
+
"repoTooltips.entityIdSize": "Defines the bit size of internal IDs used to index entities (URIs, blank nodes, literals, and RDF* embedded triples).\nUse 40 bit ID only if you expect more than 2 billion unique RDF values.",
|
|
966
1026
|
"repoTooltips.enableContextIndex": "Builds an additional Context-Predicate-Subject-Object index to boost the SPARQL query performance of queries with GRAPH/FROM/FROM NAMED clauses.",
|
|
967
1027
|
"repoTooltips.enablePredicateList": "Enables the mappings from an entity (subject or object) to its predicates; enabling it can significantly speed up queries that use wildcard predicate patterns.",
|
|
968
1028
|
"repoTooltips.queryTimeout": "Sets the number of seconds after which the evaluation of a query will be terminated; values less than or equal to zero mean no limit.",
|
|
@@ -1104,6 +1164,8 @@
|
|
|
1104
1164
|
"save.settings.btn": "Save settings",
|
|
1105
1165
|
"are.license.details.correct": "Are your license details correct?",
|
|
1106
1166
|
"edition": "Edition",
|
|
1167
|
+
"capabilities": "Capabilities",
|
|
1168
|
+
"none": "None",
|
|
1107
1169
|
"licensed.to": "Licensed to",
|
|
1108
1170
|
"valid.until": "Valid until",
|
|
1109
1171
|
"perpetual": "Perpetual",
|
|
@@ -1166,7 +1228,7 @@
|
|
|
1166
1228
|
"sparql.template.delete.template.failure": "Could not delete {{templateID}} template",
|
|
1167
1229
|
"sparql.template.get.template.error": "Could not get {{templateID}} template",
|
|
1168
1230
|
"sparql.template.iri.constraint": "SPARQL template IRI is required",
|
|
1169
|
-
"sparql.template.existing.template.error": "<div>SPARQL Template <strong>{{templateID}}</strong> already exists.</div><br><div><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"
|
|
1231
|
+
"sparql.template.existing.template.error": "<div>SPARQL Template <strong>{{templateID}}</strong> already exists.</div><br><div><span class=\"icon-2x icon-warning\" style=\"color: var(--onto-orange-dark)\"></span> Do you want to override the template query?</div>",
|
|
1170
1232
|
"update.sparql.template.success.msg": "Updated SPARQL template",
|
|
1171
1233
|
"save.sparql.template.failure.msg": "Could not save {{templateID}} template",
|
|
1172
1234
|
"sparql.template.query.constraint": "The template query must be an UPDATE query",
|
|
@@ -1210,7 +1272,9 @@
|
|
|
1210
1272
|
"size.info.not.available": "Size info not available.",
|
|
1211
1273
|
"main.gdb.description": "An application for searching, exploring and managing GraphDB semantic repositories.",
|
|
1212
1274
|
"main.info.title.welcome.page": "Welcome to GraphDB",
|
|
1213
|
-
"main.info.welcome.page": "GraphDB is a graph database compliant with RDF and SPARQL specifications. It supports open APIs based on RDF4J
|
|
1275
|
+
"main.info.welcome.page": "GraphDB is a graph database compliant with RDF and SPARQL specifications. It supports open APIs based on the RDF4J project and enables fast publishing of linked data on the web. The Workbench is used for searching, exploring and managing GraphDB repositories.",
|
|
1276
|
+
"main.info.welcome.page.guides": "<a href=\"guides\">Run our interactive guides</a> for an easy way into learning some basic concepts and getting started with GraphDB.",
|
|
1277
|
+
"main.info.welcome.page.footer": "You can always come back to this panel by pressing the GraphDB icon in the top left corner.",
|
|
1214
1278
|
"main.info.title.create.repo.page": "Create a repository",
|
|
1215
1279
|
"main.info.create.repo.page": "Now let’s create your first repository. Go to Setup > Repositories and press Create new repository button. Fill the field Repository ID and press enter. The default repository parameters are optimized for datasets up to 100 million RDF statements. If you plan to load more check for more information: {{link}}Configuring a repository</a>",
|
|
1216
1280
|
"main.info.title.load.sample.dataset": "Load a sample dataset",
|
|
@@ -1334,7 +1398,6 @@
|
|
|
1334
1398
|
"showing.label": "Showing",
|
|
1335
1399
|
"results.label": "results",
|
|
1336
1400
|
"no.plugins.match.filter.warning": "No plugins match this filter.",
|
|
1337
|
-
"ontorefine.not.available.warning": "OntoRefine is not available",
|
|
1338
1401
|
"error.warning": "404 That’s an error!",
|
|
1339
1402
|
"requested.url.not.found.msg": "The requested URL was not found on this server. That’s all I know.",
|
|
1340
1403
|
"back.home.btn": "Back Home",
|
|
@@ -1409,6 +1472,9 @@
|
|
|
1409
1472
|
"rdf.data.from.url.label": "Get RDF data from a URL",
|
|
1410
1473
|
"import.rdf.text.snippet.label": "Import RDF text snippet",
|
|
1411
1474
|
"type.paste.data.label": "Type or paste RDF data",
|
|
1475
|
+
"take.me.to.guides": "Take me to the guides",
|
|
1476
|
+
"hide.panel": "Hide panel",
|
|
1477
|
+
"show.welcome.panel": "Show welcome panel",
|
|
1412
1478
|
"ok.continue": "OK, continue",
|
|
1413
1479
|
"no.thanks": "No, thanks",
|
|
1414
1480
|
"view.rdf.data.text.visual.graph.header": "View RDF data as a text table or as a visual graph",
|
|
@@ -1428,7 +1494,6 @@
|
|
|
1428
1494
|
"expansion.ratio": "expansion ratio",
|
|
1429
1495
|
"error": "error",
|
|
1430
1496
|
"import.rdf.data.label": "Import RDF data",
|
|
1431
|
-
"import.tabular.data.ontorefine": "Import tabular data with OntoRefine",
|
|
1432
1497
|
"export.rdf.data": "Export RDF data",
|
|
1433
1498
|
"saved.sparql.queries.label": "Saved SPARQL queries",
|
|
1434
1499
|
"saved.sparql.queries.tooltip": "Execute a saved SPARQL query directly",
|
|
@@ -1567,7 +1632,7 @@
|
|
|
1567
1632
|
"change.language.tooltip": "Change language to",
|
|
1568
1633
|
"current.language.tooltip": "Current language",
|
|
1569
1634
|
"sparql.shortcuts": "keyboard shortcuts",
|
|
1570
|
-
"sparql.shortcuts.capital": "
|
|
1635
|
+
"sparql.shortcuts.capital": "keyboard shortcuts",
|
|
1571
1636
|
"sparql.shortcuts.trigger.autocomplete": "Trigger Autocompletion",
|
|
1572
1637
|
"sparql.shortcuts.delete.line": "Delete current/selected line(s)",
|
|
1573
1638
|
"sparql.shortcuts.comment.uncomment.line": "Comment or uncomment current/selected line(s)",
|
|
@@ -1615,5 +1680,100 @@
|
|
|
1615
1680
|
"all": "all",
|
|
1616
1681
|
"clear.tooltip": "Clear",
|
|
1617
1682
|
"repo.page.location.label": "Location",
|
|
1618
|
-
"repo.page.location.input.field.tooltip": "The location where to create repository. The default is the local one."
|
|
1683
|
+
"repo.page.location.input.field.tooltip": "The location where to create repository. The default is the local one.",
|
|
1684
|
+
"guide.button.guide-paused": "Guide paused",
|
|
1685
|
+
"guide.button.guide-resume": "Continue the guide",
|
|
1686
|
+
"guide.validate.no-next": "Cannot continue to next",
|
|
1687
|
+
"guide.total.progress": "Guide step {{n}} of {{nn}}",
|
|
1688
|
+
"guide.total.progress.tooltip": "This indicates the current step relative to the entire guide and the total number of steps in the guide.",
|
|
1689
|
+
"guide.block.progress": "{{n}}/{{nn}}",
|
|
1690
|
+
"guide.block.progress.tooltip": "This indicates the current step and the total number of steps in the {{action}} action.",
|
|
1691
|
+
"guide.step-type.info": "This step provides some information. No action required other than clicking the Next button.",
|
|
1692
|
+
"guide.step-type.mouse": "This step expects user action with the mouse, typically clicking on something.",
|
|
1693
|
+
"guide.step-type.input": "This step expects user input, typically typing or pasting a piece of text.",
|
|
1694
|
+
"guide.step-intro.create-repository": "The following steps show how to use the <b>{{viewName|translate}}</b> view to create a repository.",
|
|
1695
|
+
"guide.step-intro.enable-autocomplete": "The following steps show how to use the <b>{{viewName|translate}}</b> view to enable the autocomplete index.",
|
|
1696
|
+
"guide.step-intro.execute-sparql-query": "The following steps show how to use the <b>{{viewName|translate}}</b> view to execute queries.",
|
|
1697
|
+
"guide.step-intro.visual-graph": "The following steps show how to use the <b>{{viewName|translate}}</b> view to explore data in a visual manner.",
|
|
1698
|
+
"guide.step-intro.import-file": "The following steps show how to use the <b>{{viewName|translate}}</b> view to import data from a file.",
|
|
1699
|
+
"guide.step-intro.class-hierarchy": "The following steps show how to use the <b>{{viewName|translate}}</b> view to inspect the class hierarchy and gain an insight on what the dataset contains.",
|
|
1700
|
+
"guide.step-intro.table-graph": "The following steps show how to explore RDF data in tabular form without writing SPARQL queries. Click on the <b>{{iriLabel}}</b> IRI to explore it.",
|
|
1701
|
+
"guide.step-menu.click-menu": "Click on the <b>{{menuLabelKey|translate}}</b> menu.",
|
|
1702
|
+
"guide.step-action.create-repository": "Create repository",
|
|
1703
|
+
"guide.step-action.select-repository": "Connect to repository",
|
|
1704
|
+
"guide.step-action.enable-autocomplete": "Enable autocomplete",
|
|
1705
|
+
"guide.step-action.import-file": "Import file",
|
|
1706
|
+
"guide.step-action.visual-graph": "Visual graph explore",
|
|
1707
|
+
"guide.step-action.execute-sparql-query": "Execute SPARQL query",
|
|
1708
|
+
"guide.step-action.class-hierarchy": "Explore the class hierarchy",
|
|
1709
|
+
"guide.step-action.table-graph": "Explore RDF as a table",
|
|
1710
|
+
"guide.step_plugin.execute-sparql-query.query-editor.content": "Enter the following SPARQL query: {{queryExplainMessageTranslated}}{{queryAsHtmlCodeElement}}",
|
|
1711
|
+
"guide.step_plugin.execute-sparql-query.result-explain.content": "The table shows the results from executing the query.",
|
|
1712
|
+
"guide.step_plugin.execute-sparql-query.run-sparql-query.content": "Click on the <b>{{'query.editor.run.btn'|translate}}</b> button.",
|
|
1713
|
+
"guide.step_plugin.execute-sparql-query.copy-to-editor.button": "Copy to editor",
|
|
1714
|
+
"guide.step_plugin.import_rdf_file.content": "Click on the <b>{{'upload.rdf.files.label'|translate}}</b> button and choose a file with the name <b>{{resourceFile}}</b>.",
|
|
1715
|
+
"guide.step_plugin.create_repository.create_repository_button.content": "Click on the <b>{{'repository.create.btn'|translate}}</b> button.",
|
|
1716
|
+
"guide.step_plugin.create_repository.graph_db_repository.content": "Click on the <b>{{'graphdb.repo'|translate}}</b> button.",
|
|
1717
|
+
"guide.step_plugin.create_repository.repository_id.content": "Enter repository ID: <b>{{repositoryId}}.</b>",
|
|
1718
|
+
"guide.step_plugin.create_repository.save_button.content": "Click on the <b>{{'common.create.btn'|translate}}</b> button.",
|
|
1719
|
+
"guide.step_plugin.create_repository.ruleset_dropdown.content": "Choose ruleset: <b>{{rulesetName}}</b>.",
|
|
1720
|
+
"guide.step_plugin.enable-autocomplete.content": "Click on the checkbox to enable the index.",
|
|
1721
|
+
"guide.step_plugin.visual_graph_input_IRI.content": "Enter <b>{{easyGraphInputText}}</b> in the <b>Easy graph</b> text input.",
|
|
1722
|
+
"guide.step_plugin.visual_graph_show_autocomplete.content": "Click on the <b>{{iri}}</b> IRI to show the visual graph.",
|
|
1723
|
+
"guide.step_plugin.visual_graph_intro.content": "The graph shows connections between the start node, <b>{{iriLabel}}</b>, and other nodes. Each arrow represents one or more connections (RDF statements).",
|
|
1724
|
+
"guide.step_plugin.visual-graph-node-focus.title": "Visual graph nodes",
|
|
1725
|
+
"guide.step_plugin.visual-graph-node-focus.content": "A circle represents an RDF resource. In this case, <b>{{iriLabel}}</b>.",
|
|
1726
|
+
"guide.step_plugin.visual-graph-link-focus.title": "Visual graph links",
|
|
1727
|
+
"guide.step_plugin.visual-graph-link-focus.content": "An arrow with a label represents one or more links between nodes. In this case, the arrow shows the relation <b>{{fromIriLabel}} → {{iriLabel}} → {{toIriLabel}}</b>.",
|
|
1728
|
+
"guide.step_plugin.download-guide-resource.title": "Download guide resources",
|
|
1729
|
+
"guide.step_plugin.download-guide-resource.content": "This guide requires a file to be downloaded.<br>Please <a href=\"{{resourceUrl}}\" target=\"_blank\">download {{resourceFile}}</a>.",
|
|
1730
|
+
"guide.step_plugin.choose-repository.content": "Click on the repository selection dropdown.",
|
|
1731
|
+
"guide.step_plugin.select-repository.content": "Click on the <b>{{getRepositoryId()}}</b> repository button.",
|
|
1732
|
+
"guide.step_plugin.select-repository-plug.content": "Click on the plug icon of the <b>{{repositoryId}}</b> repository.",
|
|
1733
|
+
"guide.step_plugin.import_rdf_file.import-file.button.content": "Click on the <b>{{'common.import'|translate}}</b> button.",
|
|
1734
|
+
"guide.step_plugin.import_rdf_file.import-settings.import.button.content": "Click on the <b>{{'common.import'|translate}}</b> button.",
|
|
1735
|
+
"guide.step_plugin.import_rdf_file.file-must-be-uploaded": "Upload the file <b>{{resourceFile}}</b> first",
|
|
1736
|
+
"guide.step_plugin.import_status_info.content": "Wait until import finished.",
|
|
1737
|
+
"guide.step_plugin.enable-autocomplete.status_info.content": "Wait until indexing finished.",
|
|
1738
|
+
"guide.step_plugin.visual-graph-properties.title": "Visual graph properties",
|
|
1739
|
+
"guide.step_plugin.visual-graph-properties.content": "Click on <b>{{iriLabel}}</b> to show its properties.",
|
|
1740
|
+
"guide.step_plugin.visual-graph-properties-side-panel.title": "Visual graph properties",
|
|
1741
|
+
"guide.step_plugin.visual-graph-properties-side-panel.content": "The side panel shows the properties of the clicked node, <b>{{iriLabel}}</b>.",
|
|
1742
|
+
"guide.step_plugin.visual-graph-properties-side-panel-close.title": "Visual graph properties",
|
|
1743
|
+
"guide.step_plugin.visual-graph-properties-side-panel-close.content": "You can close the panel by clicking on the X icon.",
|
|
1744
|
+
"guide.step_plugin.visual-graph-properties-focus-types.title": "Visual graph properties",
|
|
1745
|
+
"guide.step_plugin.visual-graph-properties-focus-types.content": "<b>{{'types.label'|translate}}</b> shows all the RDF types for <b>{{iriLabel}}</b>.",
|
|
1746
|
+
"guide.step_plugin.visual-graph-properties-focus-property.title": "Visual graph properties",
|
|
1747
|
+
"guide.step_plugin.visual-graph-properties-focus-property.content": "The values for generic properties like <b>{{focusProperty}}</b> are listed in dedicated sections.",
|
|
1748
|
+
"guide.step_plugin.visual-graph-expand.title": "Visual graph: expand node",
|
|
1749
|
+
"guide.step_plugin.visual-graph-expand.content": "Double click on <b>{{iriLabel}}</b> to expand the graph.",
|
|
1750
|
+
"guide.step_plugin.class_hierarchy_intro.content": "The biggest circle shows all top-level classes. Every class may have subclasses shown as smaller circles within their parent class. The size of each circle indicates the proportion of RDF resources that belong to that class. Thus, bigger circles are classes that have more instances.",
|
|
1751
|
+
"guide.step_plugin.class_hierarchy_zoom.content": "The class <b>{{iri}}</b> is a parent class that has subclasses. Zoom inside to have a better view by scrolling up with the mouse inside the circle.",
|
|
1752
|
+
"guide.step_plugin.class-hierarchy-instances.title": "Class hierarchy instances",
|
|
1753
|
+
"guide.step_plugin.class-hierarchy-instances.content": "Click on <b>{{iri}}</b> to show its instances.",
|
|
1754
|
+
"guide.step_plugin.class-hierarchy-instances-side-panel.content": "The side panel shows the first 1,000 instances of the clicked class, <b>{{iri}}</b>.",
|
|
1755
|
+
"guide.step_plugin.class-hierarchy-instances-focus.content": "<b>{{focusInstance}}</b> is an instance of the class <b>{{iri}}</b>.",
|
|
1756
|
+
"guide.step_plugin.class-hierarchy-instances-count.content": "This link shows the number of instances for the selected class, <b>{{iri}}</b>. Click on the link to open the SPARQL editor with a preloaded query that selects all instances.",
|
|
1757
|
+
"guide.step_plugin.class-hierarchy-instances-side-panel-close.content": "You can close the panel by clicking on the X icon.",
|
|
1758
|
+
"guide.step_plugin.class-hierarchy-instances-query.content": "This SPARQL query selects all instances of the class <b>{{iri}}</b>. The query was entered automatically when you clicked on the view instances link.",
|
|
1759
|
+
"guide.step_plugin.class-hierarchy-instances-results.content": "The table shows the results. Note that in this particular case, the query was executed automatically.",
|
|
1760
|
+
"guide.step_plugin.class-hierarchy-instances-results.extraContent": "Do not worry — there will be a dedicated section on the SPARQL editor later in the guide.",
|
|
1761
|
+
"guide.step_plugin.table-graph-overview": "The table shows RDF statements where the subject is the selected IRI, <b>{{iriLabel}}</b>. The view can be configured to show statements where the IRI is the <i>subject</i>, <i>predicate</i>, <i>object</i>, <i>context</i> or in any position.",
|
|
1762
|
+
"guide.step_plugin.table-graph-link": "You can click on any IRI in the table to navigate to it. Click on <b>{{iriLabel}}</b>.",
|
|
1763
|
+
"guide.step_plugin.table-graph-role": "You can configure the view to show RDF statements where the current IRI is the <i>subject</i>, <i>predicate</i>, <i>object</i>, <i>context</i> or in any position. Click on the <b>{{role|translate}}</b> tab.",
|
|
1764
|
+
"guide.step_plugin.table-graph-visual": "You can always explore the same data using the <b>{{'visual.graph.label'|translate}}</b> view. Click on the {{'visual.graph.label'|translate}} button to try it now.",
|
|
1765
|
+
"guide.step_plugin.guide-ended.title": "End of guide",
|
|
1766
|
+
"guide.step_plugin.guide-ended.content": "This guide has ended.",
|
|
1767
|
+
"guide.step_plugin.execute-sparql-query.query-not-same.error": "The query is not the same as the guide query!",
|
|
1768
|
+
"guide.step_plugin.enable-autocomplete.error": "The autocomplete index is not enabled!",
|
|
1769
|
+
"guide.step_plugin.welcome.title": "Welcome to {{translatedGuideName}}",
|
|
1770
|
+
"guide.step_plugin.welcome.content": "Throughout the guide you will see boxes like this one that will provide instructions on what to do.<p>The icon in the top left corner is a hint too:<ul><li>{{infoIconHint}}</li><li>{{mouseIconHint}}</li><li>{{inputIconHint}}</li></ul></p>",
|
|
1771
|
+
"guide.step_plugin.welcome.info-icon-hint": "<span class='icon icon-1-5x icon-info'></span> means the box provides information.",
|
|
1772
|
+
"guide.step_plugin.welcome.mouse-icon-hint": "<span class='icon icon-1-5x icon-focus'></span> asks you to do something with the mouse.",
|
|
1773
|
+
"guide.step_plugin.welcome.input-icon-hint": "<span class='icon icon-1-5x icon-edit'></span> tells you to type or paste something.",
|
|
1774
|
+
"guide.step_plugin.welcome-what.title": "What is {{translatedGuideName}}?",
|
|
1775
|
+
"guide.step_plugin.welcome-what.content": "{{translatedGuideDescription}}<p>Let's get started for real now!</p>",
|
|
1776
|
+
"guide.confirm.cancel.message": "Are you sure you want to stop the guide?",
|
|
1777
|
+
"guide.unexpected.error.message": "The guide was cancelled due to an unexpected error. Please run the guide again and if the problem persists contact the support.",
|
|
1778
|
+
"guide.start.unexpected.error.message": "The guide cannot be started due to an unexpected error. Please try running the guide again and if the problem persists contact the support."
|
|
1619
1779
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import HomeSteps from "../../steps/home-steps";
|
|
2
2
|
import ImportSteps from "../../steps/import-steps";
|
|
3
|
+
import {REPOSITORIES_URL} from "../../support/repository-commands";
|
|
3
4
|
|
|
4
5
|
describe('Repositories', () => {
|
|
5
6
|
|
|
@@ -42,7 +43,7 @@ describe('Repositories', () => {
|
|
|
42
43
|
beforeEach(() => {
|
|
43
44
|
repositoryId = 'repo-' + Date.now();
|
|
44
45
|
cy.intercept('/rest/locations?filterClusterLocations=true').as('getLocations');
|
|
45
|
-
cy.intercept('
|
|
46
|
+
cy.intercept(REPOSITORIES_URL + 'all').as('getRepositories');
|
|
46
47
|
|
|
47
48
|
cy.visit('/repository');
|
|
48
49
|
waitLoader();
|
|
@@ -382,131 +383,120 @@ describe('Repositories', () => {
|
|
|
382
383
|
getConstraintUploadButton().scrollIntoView().should('be.visible').and('not.be.disabled');
|
|
383
384
|
});
|
|
384
385
|
|
|
385
|
-
// Remove skip, when https://gitlab.ontotext.com/graphdb-team/graphdb/-/merge_requests/1584 is merged
|
|
386
386
|
//Create Ontop repository and test ontop functionality
|
|
387
|
-
it
|
|
387
|
+
it('should create an Ontop repository', () => {
|
|
388
388
|
let obdaFileUpload = '';
|
|
389
389
|
let ontologyFileUpload = '';
|
|
390
390
|
let propertiesFileUpload = '';
|
|
391
|
-
const url = 'http://localhost:9000/rest/repositories/file/upload';
|
|
392
|
-
const fileType = '';
|
|
393
391
|
const virtualRepoName = 'virtual-repo-' + Date.now();
|
|
394
392
|
|
|
395
|
-
// upload obda file
|
|
396
393
|
cy.fixture('ontop/university-complete.obda', 'binary').then((file) => {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
cy.form_request(url, formData).then(response => {
|
|
402
|
-
return obdaFileUpload = response.response.body.fileLocation;
|
|
403
|
-
});
|
|
394
|
+
// upload obda file
|
|
395
|
+
return uploadConfigurationFile(file, 'university-complete.obda').then((response) => {
|
|
396
|
+
obdaFileUpload = response.response.body.fileLocation;
|
|
404
397
|
});
|
|
405
398
|
}).then(() => {
|
|
406
399
|
// upload ontology file
|
|
407
|
-
cy.fixture('ontop/university-complete.ttl', 'binary').then((file) => {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
formData.set('file', blob, 'university-complete.ttl');
|
|
411
|
-
|
|
412
|
-
cy.form_request(url, formData).then(response => {
|
|
413
|
-
return ontologyFileUpload = response.response.body.fileLocation;
|
|
414
|
-
});
|
|
400
|
+
return cy.fixture('ontop/university-complete.ttl', 'binary').then((file) => {
|
|
401
|
+
return uploadConfigurationFile(file, 'university-complete.ttl').then((response) => {
|
|
402
|
+
ontologyFileUpload = response.response.body.fileLocation;
|
|
415
403
|
});
|
|
416
|
-
})
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
cy.form_request(url, formData).then(response => {
|
|
424
|
-
return propertiesFileUpload = response.response.body.fileLocation;
|
|
425
|
-
});
|
|
426
|
-
});
|
|
404
|
+
});
|
|
405
|
+
}).then(() => {
|
|
406
|
+
// upload property file
|
|
407
|
+
return cy.fixture('ontop/university-complete.properties', 'binary').then((file) => {
|
|
408
|
+
return uploadConfigurationFile(file, 'university-complete.properties').then((response) => {
|
|
409
|
+
propertiesFileUpload = response.response.body.fileLocation;
|
|
427
410
|
});
|
|
428
|
-
})
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
411
|
+
});
|
|
412
|
+
}).then(() => {
|
|
413
|
+
const body = {
|
|
414
|
+
id: virtualRepoName,
|
|
415
|
+
title: '',
|
|
416
|
+
type: 'ontop',
|
|
417
|
+
params: {
|
|
418
|
+
propertiesFile: {
|
|
419
|
+
label: 'JDBC properties file',
|
|
420
|
+
name: 'propertiesFile',
|
|
421
|
+
value: propertiesFileUpload
|
|
422
|
+
},
|
|
423
|
+
isShacl: {
|
|
424
|
+
label: 'Supports SHACL validation',
|
|
425
|
+
name: 'isShacle',
|
|
426
|
+
value: false
|
|
427
|
+
},
|
|
428
|
+
owlFile: {
|
|
429
|
+
label: 'Ontology file',
|
|
430
|
+
name: 'owlFile',
|
|
431
|
+
value: ontologyFileUpload
|
|
432
|
+
},
|
|
433
|
+
constraintFile: {
|
|
434
|
+
label: 'Constraint file',
|
|
435
|
+
name: 'constraintFile',
|
|
436
|
+
value: ''
|
|
437
|
+
},
|
|
438
|
+
id: {
|
|
439
|
+
label: 'Repository ID',
|
|
440
|
+
name: 'id',
|
|
441
|
+
value: 'ontop-repo'
|
|
442
|
+
},
|
|
443
|
+
title: {
|
|
444
|
+
label: "Repository title",
|
|
445
|
+
name: "title",
|
|
446
|
+
value: "Ontop virtual store"
|
|
447
|
+
},
|
|
448
|
+
obdaFile: {
|
|
449
|
+
label: "OBDA or R2RML file",
|
|
450
|
+
name: "obdaFile",
|
|
451
|
+
value: obdaFileUpload
|
|
452
|
+
},
|
|
453
|
+
dbMetadataFile: {
|
|
454
|
+
"name": "dbMetadataFile",
|
|
455
|
+
"label": "DB metadata file",
|
|
456
|
+
"value": ""
|
|
457
|
+
},
|
|
458
|
+
additionalProperties: {
|
|
459
|
+
"label": "Additional Ontop/JDBC properties",
|
|
460
|
+
"name": "additionalProperties",
|
|
461
|
+
"value": ""
|
|
469
462
|
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
}).then(response => {
|
|
478
|
-
console.log(response);
|
|
479
|
-
});
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
cy.request({
|
|
466
|
+
method: 'POST',
|
|
467
|
+
url: REPOSITORIES_URL,
|
|
468
|
+
body,
|
|
469
|
+
headers: {'Content-Type': 'application/json;charset=UTF-8'}
|
|
480
470
|
});
|
|
481
|
-
});
|
|
482
471
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
472
|
+
cy.reload(); //refresh page as the virtual repo is not visible in the UI when created with the request
|
|
473
|
+
|
|
474
|
+
//Check workbench restricted sections when connected to an Ontop repository
|
|
475
|
+
selectRepoFromDropdown(virtualRepoName);
|
|
476
|
+
cy.visit("/import");
|
|
477
|
+
getOntopFunctionalityDisabledMessage();
|
|
478
|
+
cy.visit("/monitor/queries");
|
|
479
|
+
getOntopFunctionalityDisabledMessage();
|
|
480
|
+
cy.visit("/connectors");
|
|
481
|
+
getOntopFunctionalityDisabledMessage();
|
|
482
|
+
cy.visit("/autocomplete");
|
|
483
|
+
getOntopFunctionalityDisabledMessage();
|
|
484
|
+
cy.visit("/rdfrank");
|
|
485
|
+
getOntopFunctionalityDisabledMessage();
|
|
486
|
+
cy.visit("/jdbc");
|
|
487
|
+
getOntopFunctionalityDisabledMessage();
|
|
488
|
+
|
|
489
|
+
//TODO - uncomment following when org.h2.Driver is added to the class path of the instance
|
|
490
|
+
//
|
|
491
|
+
// //Check that Inference and SameAs are disabled also that explain plan is not supported.
|
|
492
|
+
// cy.visit("/sparql");
|
|
493
|
+
// cy.get('.ot-splash').should('not.exist'); //wait until SPARQL page is loaded completely
|
|
494
|
+
//
|
|
495
|
+
// //check that Inference and SameAs buttons are disabled.
|
|
496
|
+
// cy.get('#inference').should('be', 'visible').and('be', 'disabled');
|
|
497
|
+
// cy.get('#sameAs').should('be', 'visible').and('be', 'disabled');
|
|
498
|
+
cy.deleteRepository(virtualRepoName);
|
|
499
|
+
});
|
|
510
500
|
});
|
|
511
501
|
|
|
512
502
|
it('should verify different virtual repository RDBMS provider elements', () => {
|
|
@@ -532,6 +522,7 @@ describe('Repositories', () => {
|
|
|
532
522
|
|
|
533
523
|
testOntopConfigurationElementsVisibility('Database driver', '#driverType');
|
|
534
524
|
testOntopConfigurationElementsVisibility('JDBC properties file*', '#propertiesFile');
|
|
525
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
535
526
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
536
527
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
537
528
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -547,6 +538,7 @@ describe('Repositories', () => {
|
|
|
547
538
|
testOntopConfigurationElementsVisibility('Password', '#password');
|
|
548
539
|
testOntopConfigurationElementsVisibility('Driver class', '#driverClass');
|
|
549
540
|
testOntopConfigurationElementsVisibility('URL', '#url');
|
|
541
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
550
542
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
551
543
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
552
544
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -564,6 +556,7 @@ describe('Repositories', () => {
|
|
|
564
556
|
testOntopConfigurationElementsVisibility('Password', '#password');
|
|
565
557
|
testOntopConfigurationElementsVisibility('Driver class', '#driverClass');
|
|
566
558
|
testOntopConfigurationElementsVisibility('URL', '#url');
|
|
559
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
567
560
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
568
561
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
569
562
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -581,6 +574,7 @@ describe('Repositories', () => {
|
|
|
581
574
|
testOntopConfigurationElementsVisibility('Password', '#password');
|
|
582
575
|
testOntopConfigurationElementsVisibility('Driver class', '#driverClass');
|
|
583
576
|
testOntopConfigurationElementsVisibility('URL', '#url');
|
|
577
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
584
578
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
585
579
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
586
580
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -598,6 +592,7 @@ describe('Repositories', () => {
|
|
|
598
592
|
testOntopConfigurationElementsVisibility('Password', '#password');
|
|
599
593
|
testOntopConfigurationElementsVisibility('Driver class', '#driverClass');
|
|
600
594
|
testOntopConfigurationElementsVisibility('URL', '#url');
|
|
595
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
601
596
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
602
597
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
603
598
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -615,6 +610,7 @@ describe('Repositories', () => {
|
|
|
615
610
|
testOntopConfigurationElementsVisibility('Password', '#password');
|
|
616
611
|
testOntopConfigurationElementsVisibility('Driver class', '#driverClass');
|
|
617
612
|
testOntopConfigurationElementsVisibility('URL', '#url');
|
|
613
|
+
testOntopConfigurationElementsVisibility('Additional Ontop/JDBC properties', '#additionalProperties');
|
|
618
614
|
testOntopConfigurationElementsVisibility('OBDA or R2RML file*', '#obdaFile');
|
|
619
615
|
testOntopConfigurationElementsVisibility('Constraint file', '#constraintFile');
|
|
620
616
|
testOntopConfigurationElementsVisibility('Ontology file', '#owlFile');
|
|
@@ -725,6 +721,15 @@ describe('Repositories', () => {
|
|
|
725
721
|
.verifyImportStatus('Text snippet', 'org.eclipse.rdf4j.sail.shacl.GraphDBShaclSailValidationException: Failed SHACL validation');
|
|
726
722
|
});
|
|
727
723
|
|
|
724
|
+
function uploadConfigurationFile(file, filename) {
|
|
725
|
+
const fileType = '';
|
|
726
|
+
const url = REPOSITORIES_URL + 'file/upload';
|
|
727
|
+
const blob = Cypress.Blob.binaryStringToBlob(file, fileType);
|
|
728
|
+
const formData = new FormData();
|
|
729
|
+
formData.set('file', blob, filename);
|
|
730
|
+
return cy.form_request(url, formData);
|
|
731
|
+
}
|
|
732
|
+
|
|
728
733
|
function assertRepositoryStatus(repositoryId, status) {
|
|
729
734
|
cy.waitUntil(() =>
|
|
730
735
|
getRepositoryFromList(repositoryId)
|
|
@@ -924,7 +929,7 @@ describe('Repositories', () => {
|
|
|
924
929
|
|
|
925
930
|
function getOntopFunctionalityDisabledMessage() {
|
|
926
931
|
return cy.get('.repository-errors div.alert')
|
|
927
|
-
.should('be
|
|
932
|
+
.should('be.visible')
|
|
928
933
|
.and('contain', 'Some functionalities are not available because')
|
|
929
934
|
.and('contain', ' is read-only Virtual Repository');
|
|
930
935
|
}
|
|
@@ -32,5 +32,27 @@ describe('YASQE and YASR language change validation', () => {
|
|
|
32
32
|
SparqlSteps.getEditorAndResultsBtn().should('contain', 'Éditeur et résultats');
|
|
33
33
|
SparqlSteps.getResultsOnlyBtn().should('contain', 'Résultats seulement');
|
|
34
34
|
});
|
|
35
|
+
|
|
36
|
+
it('should change "Download as" dropdown label. Test "GDB-8100" bug.', () => {
|
|
37
|
+
|
|
38
|
+
// When I visit a page with YASQE and YASR in it,
|
|
39
|
+
// and execute a query.
|
|
40
|
+
SparqlSteps.executeQuery();
|
|
41
|
+
|
|
42
|
+
// Then I expect 'Download as' to be translated to English.
|
|
43
|
+
SparqlSteps.getDownloadBtn().should('contain', 'Download as');
|
|
44
|
+
|
|
45
|
+
// When I change the language.
|
|
46
|
+
SparqlSteps.changeLanguage('fr');
|
|
47
|
+
|
|
48
|
+
// Then I expect 'Download as' to be translated to French.
|
|
49
|
+
SparqlSteps.getDownloadBtn().should('contain', 'Téléchargement');
|
|
50
|
+
|
|
51
|
+
// When I rerun the query.
|
|
52
|
+
SparqlSteps.executeQuery();
|
|
53
|
+
|
|
54
|
+
// Then I expect 'Download as' to be translated to French.
|
|
55
|
+
SparqlSteps.getDownloadBtn().should('contain', 'Téléchargement');
|
|
56
|
+
});
|
|
35
57
|
});
|
|
36
58
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "graphdb-workbench-tests",
|
|
3
|
-
"version": "2.3.0-
|
|
3
|
+
"version": "2.3.0-TR4",
|
|
4
4
|
"description": "Cypress tests for GraphDB workbench",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"start": "cypress open",
|
|
@@ -33,7 +33,10 @@
|
|
|
33
33
|
"graphdb-workbench-cypress": "bin/graphdb-workbench-cypress"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"
|
|
36
|
+
"cypress-multi-reporters": "^1.6.3",
|
|
37
|
+
"del": "^6.1.1",
|
|
38
|
+
"minimist": "^1.2.5",
|
|
39
|
+
"mocha-junit-reporter": "^2.2.0"
|
|
37
40
|
},
|
|
38
41
|
"resolutions": {
|
|
39
42
|
"minimist": "^1.2.5"
|
package/plugins/index.js
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
// This function is called when a project is opened or re-opened (e.g. due to
|
|
12
12
|
// the project's config changing)
|
|
13
13
|
|
|
14
|
+
const del = require('del');
|
|
15
|
+
|
|
14
16
|
module.exports = (on, config) => {
|
|
15
17
|
// `on` is used to hook into various events Cypress emits
|
|
16
18
|
// `config` is the resolved Cypress config
|
|
@@ -26,4 +28,18 @@ module.exports = (on, config) => {
|
|
|
26
28
|
'cypress-logs|txt': 'txt'
|
|
27
29
|
}
|
|
28
30
|
});
|
|
31
|
+
|
|
32
|
+
// keep only the videos for the failed specs
|
|
33
|
+
on('after:spec', (spec, results) => {
|
|
34
|
+
if (results && results.video) {
|
|
35
|
+
// Do we have failures for any retry attempts?
|
|
36
|
+
const failures = results.tests.some((test) => {
|
|
37
|
+
return test.attempts.some((attempt) => attempt.state === 'failed');
|
|
38
|
+
});
|
|
39
|
+
if (!failures) {
|
|
40
|
+
// delete the video if the spec passed and no tests retried
|
|
41
|
+
return del(results.video);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
29
45
|
};
|
package/support/commands.js
CHANGED
|
@@ -36,17 +36,19 @@ Cypress.Commands.add('iframe', {prevSubject: 'element'}, ($iframe) => {
|
|
|
36
36
|
// Performs an XMLHttpRequest instead of a cy.request (able to send data as
|
|
37
37
|
// FormData - multipart/form-data)
|
|
38
38
|
Cypress.Commands.add("form_request", (url, formData) => {
|
|
39
|
-
return cy
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
return cy.intercept({
|
|
40
|
+
method: "POST",
|
|
41
|
+
url,
|
|
42
|
+
times: 1
|
|
43
|
+
})
|
|
44
|
+
.as('formRequest')
|
|
43
45
|
.window()
|
|
44
46
|
.then((win) => {
|
|
45
47
|
var xhr = new win.XMLHttpRequest();
|
|
46
48
|
xhr.open("POST", url);
|
|
47
49
|
xhr.send(formData);
|
|
48
50
|
})
|
|
49
|
-
.wait(
|
|
51
|
+
.wait('@formRequest');
|
|
50
52
|
});
|
|
51
53
|
|
|
52
54
|
/**
|