'use strict' const fsp = require('fs').promises const Serverless = require('../../../../../lib/serverless') const chai = require('chai') const writeFile = require('../../../../../lib/utils/fs/write-file') const readFile = require('../../../../../lib/utils/fs/read-file') const { getTmpFilePath } = require('../../../../utils/fs') // Configure chai chai.use(require('chai-as-promised')) chai.use(require('sinon-chai')) const expect = require('chai').expect describe('#writeFile()', function () { let serverless this.timeout(0) beforeEach(() => { serverless = new Serverless({ commands: [], options: {} }) }) it('should write a .json file asynchronously', async () => { const tmpFilePath = getTmpFilePath('anything.json') return writeFile(tmpFilePath, { foo: 'bar' }).then(() => expect(readFile(tmpFilePath)).to.eventually.deep.equal({ foo: 'bar' }), ) }) it('should write a .yml file synchronously', async () => { const tmpFilePath = getTmpFilePath('anything.yml') return writeFile(tmpFilePath, { foo: 'bar' }).then(() => expect(serverless.yamlParser.parse(tmpFilePath)).to.eventually.deep.equal( { foo: 'bar' }, ), ) }) it('should write a .yaml file synchronously', async () => { const tmpFilePath = getTmpFilePath('anything.yaml') return writeFile(tmpFilePath, { foo: 'bar' }).then(() => expect(serverless.yamlParser.parse(tmpFilePath)).to.eventually.deep.equal( { foo: 'bar' }, ), ) }) it('should be able to write an object with circular references', async () => { const tmpFilePath = getTmpFilePath('anything.json') const bar = {} bar.foo = bar const expected = '{\n "foo": {\n "$ref": "$"\n }\n}' return writeFile(tmpFilePath, bar, true).then(() => expect(fsp.readFile(tmpFilePath, 'utf8')).to.eventually.equal(expected), ) }) })