data-cli
Version:
CLI for working with data packages
582 lines (481 loc) • 26.4 kB
JavaScript
// These tests are run only on tagged commits
const test = require('ava')
const clipboardy = require('clipboardy')
const {runcli} = require('../cli.test.js')
// =====================
// DATA-CLI PUSH correct
// QA tests [pushing valid CSV file]
test.serial('push command succeeds with regular CSV file', async t => {
const path_ = 'test/fixtures/test-data/files/csv/separators/comma.csv'
const args = '--name=comma-separated'
const result = await runcli('push', path_, args)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/comma-separated/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/comma-separated/v/'))
})
// end of [pushing valid CSV file]
test.serial('push --public', async t => {
const path_ = 'test/fixtures/test-data/files/csv/separators/comma.csv'
const args = ['--name=public-test', '--public', '--debug']
const result = await runcli('push', path_, ...args)
t.truthy(result.stdout.includes('"findability": "published"'))
})
// QA tests [pushing valid dataset from path]
test.serial('push command succeeds for valid dataset', async t => {
const path_ = 'test/fixtures/test-data/packages/basic-csv'
const result = await runcli('push', path_)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/basic-csv/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/basic-csv/v/'))
})
// end of [pushing valid dataset from path]
// QA tests [pushing valid dataset from working directory]
test.serial('pushing valid dataset from working directory', async t =>{
const path_ = 'test/fixtures/test-data/packages/basic-csv'
const usualWorkingDir = process.cwd()
process.chdir(path_)
console.log('Working directory changed: ' + process.cwd())
// push test
const result = await runcli('push')
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/basic-csv/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/basic-csv/v/'))
// change working dir to default, so other tests will not fail
process.chdir(usualWorkingDir)
console.log('Working directory restored: ' + process.cwd())
})
// QA tests [pushing multiple CSV files together] - should push only one file and show a WARNING message
// https://datahub.io/test/zero/v/87
test.serial.failing('pushing multiple CSV files Warning message', async t => {
const path_ = 'test/fixtures/test-data/files/csv/separators/comma.csv'
const path2_ = 'test/fixtures/test-data/files/csv/separators/colon.csv'
const args = '--name=comma-separated'
const result = await runcli('push', path_, path2_, args)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/comma-separated/v/'))
const hasWarningMessage = stdout.find(item => item.includes(`Warning: pushing only the ${path_} file.`))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
t.truthy(hasWarningMessage)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/comma-separated/v/'))
})
// QA tests [pushing valid dataset with path to datapackage.json]
test.serial('push command succeeds for valid dataset with path to dp.json', async t => {
const path_ = 'test/fixtures/test-data/packages/basic-csv/datapackage.json'
const result = await runcli('push', path_)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/basic-csv/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/basic-csv/v/'))
})
// end of [pushing valid dataset with path to datapackage.json]
// QA tests [pushing valid CSV from URL]
test.serial('push command succeeds with regular CSV file from URL', async t => {
const url_ = 'https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/csv/separators/comma.csv'
const args = '--name=comma-separated'
const result = await runcli('push', url_, args)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/comma-separated/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/comma-separated/v/'))
})
// end of [pushing valid CSV from URL]
// ========================
// Invalid metadata or data
// QA tests [Push: Invalid datapackage.json]
test('push command fails with invalid JSON descriptor', async t => {
let path_ = 'test/fixtures/test-data/packages/invalid-json-single-quotes'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
let hasErrorMsg = stdout.find(item => item.includes('> Error! Unexpected token \' in JSON at position 27'))
t.truthy(hasErrorMsg)
// Suggests running validate command:
const hasSuggestionMsg = stdout.find(item => item.includes('> \'data validate\' to check your data.'))
t.truthy(hasSuggestionMsg)
path_ = 'test/fixtures/test-data/packages/invalid-json-missing-comma'
result = await runcli('push', path_)
stdout = result.stdout.split('\n')
hasErrorMsg = stdout.find(item => item.includes('> Error! Unexpected string in JSON at position 113'))
t.truthy(hasErrorMsg)
})
// end of [Push: Invalid datapackage.json]
// QA tests [Push: Invalid descriptor metadata]
test('push command fails with descriptor validation error', async t => {
let path_ = 'test/fixtures/test-data/packages/invalid-descriptor'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
const hasErrorMsg = stdout.find(item => item.includes('Descriptor validation error:'))
t.truthy(hasErrorMsg)
let hasErrorDetails = stdout.find(item => item.includes('String does not match pattern: ^([-a-z0-9._/])+$'))
t.truthy(hasErrorDetails)
hasErrorDetails = stdout.find(item => item.includes('at \"/name\" in descriptor'))
t.truthy(hasErrorDetails)
})
// end of [Push: Invalid descriptor metadata]
// QA tests [Push: Missing descriptor]
test('push command fails if descriptor is missing', async t => {
let path_ = 'test/fixtures/test-data/packages'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
const hasErrorMsg = stdout.find(item => item.includes('> Error! No datapackage.json at destination.'))
t.truthy(hasErrorMsg)
let suggestsToDoValidate = stdout.find(item => item.includes('data validate'))
let suggestsToDoInit = stdout.find(item => item.includes('data init'))
t.truthy(suggestsToDoValidate)
t.truthy(suggestsToDoInit)
})
// end of [Push: Missing descriptor]
// QA tests [Push: pushing remote data package]
test('push command fails for remote datasets', async t => {
let path_ = 'https://github.com/frictionlessdata/test-data/blob/master/packages/basic-csv/datapackage.json'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
const hasErrorMsg = stdout.find(item => item.includes('Error: You can push only local datasets.'))
t.truthy(hasErrorMsg)
})
// end of [Push: pushing remote data package]
// QA tests [Push: pushing valid dataset with remote resource]
test('push command succeeds for valid dataset with remote resource', async t => {
let path_ = 'test/fixtures/test-data/packages/remote-csv'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/remote-resource/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/remote-resource/v/'))
})
// end of [Push: pushing valid dataset with remote resource]
// QA tests [Pushing invalid CSV file (irrespective of schema)]
// Also includes [pushing invalid CSV from URL ]
test.failing('push command fails for invalid local CSV file', async t => {
const path_ = 'test/fixtures/test-data/packages/invalid-data/extra-column.csv'
const args = '--name=extra-column'
const result = await runcli('push', path_, args)
const stdout = result.stdout.split('\n')
const hasErrorMsg = stdout.find(item => item.includes('> Error! Number of columns is inconsistent on line 2'))
t.truthy(hasErrorMsg)
})
// end of [Pushing invalid CSV file (irrespective of schema)]
// QA tests [Pushing packaged invalid CSV file (irrespective of schema)]
test.serial('push command succeeds with packaged invalid CSV', async t => {
const path_ = 'test/fixtures/test-data/packages/invalid-data'
const result = await runcli('push', path_)
const stdout = result.stdout.split('\n')
const hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
const hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/basic-csv/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
const whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/basic-csv/v/'))
})
// end of [Pushing packaged invalid CSV file (irrespective of schema)]
// QA tests [Push non existing file]
test('push command fails for non-existing file', async t => {
let path_ = 'non-existing.csv'
let result = await runcli('push', path_)
let stdout = result.stdout.split('\n')
const hasErrorMsg = stdout.find(item => item.includes('> Error! ENOENT: no such file or directory, lstat \'non-existing.csv\''))
t.truthy(hasErrorMsg)
})
// end of [Push non existing file]
// QA tests [pushing empty but correct files]
test('push command for empty files: no ext, html, txt, json', async t => {
let path_ = 'test/fixtures/test-data/files/empty-files/empty'
let args = '--name=empty-no-extension'
let result = await runcli('push', path_, args)
let stdout = result.stdout.split('\n')
let hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
let hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/empty-no-extension/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/empty-files/empty.html'
args = '--name=empty-html'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/empty-html/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
let whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/empty-html/v/'))
path_ = 'test/fixtures/test-data/files/empty-files/empty.txt'
args = '--name=empty-txt'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/empty-txt/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/empty-files/empty.json'
args = '--name=empty-json'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/empty-json/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/empty-json/v/'))
})
test('push command fails for empty files tabular files such as csv,xls', async t => {
let path_ = 'test/fixtures/test-data/files/empty-files/empty.csv'
let args = '--name=empty-csv'
let result = await runcli('push', path_, args)
let stdout = result.stdout.split('\n')
let hasErrorMsg = stdout.find(item => item.includes('tabular file is invalid: test/fixtures/test-data/files/empty-files/empty.csv'))
t.truthy(hasErrorMsg)
path_ = 'test/fixtures/test-data/files/empty-files/empty.xls'
result = await runcli('push', path_, args)
args = '--name=empty-xls'
stdout = result.stdout.split('\n')
hasErrorMsg = stdout.find(item => item.includes('You cannot push an empty sheet. Please, add some data and try again.'))
t.truthy(hasErrorMsg)
})
// end of [pushing empty but correct files]
// QA tests [pushing 0 bytes files]
test('push command fails for zero byte files', async t => {
let path_ = 'test/fixtures/test-data/files/zero-files/zero'
let args = '--name=zero'
let result = await runcli('push', path_, args)
let stdout = result.stdout.split('\n')
let hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
let hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/zero/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/zero-files/zero.csv'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
t.true(stdout[0].includes('> Error! tabular file is invalid:'))
path_ = 'test/fixtures/test-data/files/zero-files/zero.html'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/zero/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/zero-files/zero.txt'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/zero/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/zero-files/zero.json'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/zero/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
path_ = 'test/fixtures/test-data/files/zero-files/zero.xls'
result = await runcli('push', path_, args)
stdout = result.stdout.split('\n')
let hasErrorMsg = stdout.find(item => item.includes('You can not push empty files, please add some data and try again'))
t.truthy(hasErrorMsg)
})
// end of [pushing 0 bytes files]
// ==========
// Formatting
// QA tests [pushing valid CSV with force formatting wrong extention (from path and URl)]
test.serial('push command succeeds for CSV with wrong ext but force formatting', async t => {
const path_ = 'test/fixtures/test-data/files/wrong-extension-files/comma.txt'
let argName = '--name=comma-separated'
let argFormat = '--format=csv'
let result = await runcli('push', path_, argName, argFormat)
let stdout = result.stdout.split('\n')
let hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
let hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/comma-separated/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
let whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/comma-separated/v/'))
const url_ = 'https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/wrong-extension-files/comma.txt'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/comma-separated/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/comma-separated/v/'))
})
// end of [pushing valid CSV with force formatting wrong extention (from path and URl)]
// QA tests [pushing valid XLS and XLSX with force formatting]
test('push command succeeds for Excel with wrong ext but force formatting', async t => {
let path_ = 'test/fixtures/test-data/files/wrong-extension-files/sample-1-sheet.txt'
let argName = '--name=sample-excel-with-force-formatting'
let argFormat = '--format=xls'
let result = await runcli('push', path_, argName, argFormat)
let stdout = result.stdout.split('\n')
let hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
let hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/sample-excel-with-force-formatting/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
let whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/sample-excel-with-force-formatting/v/'))
path_ = 'test/fixtures/test-data/files/wrong-extension-files/sample-1-sheet.pdf'
argFormat = '--format=xlsx'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasPublishedMessage = stdout.find(item => item.includes('your data is published!'))
hasURLtoShowcase = stdout.find(item => item.includes('https://datahub.io/test/sample-excel-with-force-formatting/v/'))
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/sample-excel-with-force-formatting/v/'))
})
// end of [pushing valid XLS and XLSX with force formatting]
// QA test [pushing not CSV with force formatting]
test('push command fails for non-CSV with force formatting', async t => {
let path_ = 'test/fixtures/test-data/files/excel/sample-1-sheet.xls'
const argName = '--name=not-csv-as-csv'
const argFormat = '--format=csv'
let result = await runcli('push', path_, argName, argFormat)
let stdout = result.stdout.split('\n')
let hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
let url_ = 'https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/excel/sample-1-sheet.xls'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
path_ = 'test/fixtures/test-data/files/excel/sample-1-sheet.xlsx'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
url_ = 'https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/excel/sample-1-sheet.xlsx'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
})
// end of [pushing not CSV with force formatting]
// QA test [pushing not CSV with force formatting (non tabular )]
test('push command fails for non-CSV (non-tabular) files with force formatting', async t => {
let path_ = 'test/fixtures/test-data/files/other/sample.json'
const argName = '--name=not-csv-as-csv'
const argFormat = '--format=csv'
let result = await runcli('push', path_, argName, argFormat)
let stdout = result.stdout.split('\n')
let hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
let url_ = 'https://raw.githubusercontent.com/frictionlessdata/test-data/master/files/other/sample.json'
result = await runcli('push', path_, argName, argFormat)
stdout = result.stdout.split('\n')
hasExpectedErrorMsg = stdout.find(item => item.includes('> Error! tabular file is invalid'))
t.truthy(hasExpectedErrorMsg)
})
// end of [pushing not CSV with force formatting (non tabular )]
// ===========
// Excel files
// QA test [pushing excel file with 1 sheet]
test.serial('push command succeeds for simple Excel with 1 sheet', async t => {
let path_ = 'test/fixtures/test-data/files/excel/sample-1-sheet.xls'
const argName = '--name=test-excel-1-sheet'
let result = await runcli('push', path_, argName, '--debug')
// Check what's printed in console while in debug mode, e.g., if schema is included:
let hasSchemaForFirstSheet = result.stdout.includes('"name": "number"')
t.truthy(hasSchemaForFirstSheet)
let hasPublishedMessage = result.stdout.includes('your data is published!')
let hasURLtoShowcase = result.stdout.includes('https://datahub.io/test/test-excel-1-sheet/v/')
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
let whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/test-excel-1-sheet/v/'))
path_ = 'test/fixtures/test-data/files/excel/sample-1-sheet.xlsx'
result = await runcli('push', path_, argName, '--debug')
hasSchemaForFirstSheet = result.stdout.includes('"name": "number"')
t.truthy(hasSchemaForFirstSheet)
hasPublishedMessage = result.stdout.includes('your data is published!')
hasURLtoShowcase = result.stdout.includes('https://datahub.io/test/test-excel-1-sheet/v/')
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/test-excel-1-sheet/v/'))
})
// end of [pushing excel file with 1 sheet]
// QA test [pushing excel file with selected sheets]
// also includes:
// [pushing excel file with selected non existing sheet]
// [pushing excel file with all sheets]
// [pushing excel file with list of sheets]
test.serial('push command succeeds for Excel with selected sheet', async t => {
let path_ = 'test/fixtures/test-data/files/excel/sample-2-sheets.xls'
const argName = '--name=test-excel-2-sheets'
let argSheets = '--sheets=2'
let result = await runcli('push', path_, argName, argSheets, '--debug')
// Check what's printed in console while in debug mode, e.g., if schema is included:
let hasSchemaForSecondSheet = result.stdout.includes('"name": "header4"')
t.truthy(hasSchemaForSecondSheet)
let hasPublishedMessage = result.stdout.includes('your data is published!')
let hasURLtoShowcase = result.stdout.includes('https://datahub.io/test/test-excel-2-sheets/v/')
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
let whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/test-excel-2-sheets/v/'))
path_ = 'test/fixtures/test-data/files/excel/sample-2-sheets.xlsx'
result = await runcli('push', path_, argName, argSheets, '--debug')
// Check what's printed in console while in debug mode, e.g., if schema is included:
hasSchemaForSecondSheet = result.stdout.includes('"name": "header4"')
t.truthy(hasSchemaForSecondSheet)
hasPublishedMessage = result.stdout.includes('your data is published!')
hasURLtoShowcase = result.stdout.includes('https://datahub.io/test/test-excel-2-sheets/v/')
t.truthy(hasPublishedMessage)
t.truthy(hasURLtoShowcase)
whatsInClipboard = await clipboardy.read()
t.true(whatsInClipboard.includes('https://datahub.io/test/test-excel-2-sheets/v/'))
argSheets = '--sheets=5'
result = await runcli('push', path_, argName, argSheets, '--debug')
let hasErrorMsg = result.stdout.includes('Error! sheet index 5 is out of range')
t.truthy(hasErrorMsg)
argSheets = '--sheets=all'
result = await runcli('push', path_, argName, argSheets, '--debug')
let hasSchemaForFirstSheet = result.stdout.includes('"name": "header1"')
hasSchemaForSecondSheet = result.stdout.includes('"name": "header4"')
t.truthy(hasSchemaForFirstSheet)
t.truthy(hasSchemaForSecondSheet)
argSheets = '--sheets=1,2'
result = await runcli('push', path_, argName, argSheets, '--debug')
hasSchemaForFirstSheet = result.stdout.includes('"name": "header1"')
hasSchemaForSecondSheet = result.stdout.includes('"name": "header4"')
t.truthy(hasSchemaForFirstSheet)
t.truthy(hasSchemaForSecondSheet)
})
// end of [pushing excel file with selected sheets]
test('push command fails for resources with invalid URL as path', async t => {
const url_ = 'https://github.com/datasets/testtest'
const argName = '--name=test'
let result = await runcli('push', url_, argName)
let stdout = result.stdout.split('\n')
let hasErrorMsg = stdout.find(item => item.includes('> Error! Invalid URL. 404 Not Found: https://github.com/datasets/testtest'))
t.truthy(hasErrorMsg)
// Pushing a dataset with remote resource:
const path_ = 'test/fixtures/test-data/packages/invalid-remote-path/'
result = await runcli('push', path_, argName)
stdout = result.stdout.split('\n')
hasErrorMsg = stdout.find(item => item.includes('> Error! '))
t.truthy(hasErrorMsg)
})