// Copyright 2022 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

const path = require('path');
const cp = require('child_process');
const {before, describe, it} = require('mocha');
const {assert, expect} = require('chai');

const execSync = cmd => cp.execSync(cmd, {encoding: 'utf-8'});

const cwd = path.join(__dirname, '..');

describe('Write user event', () => {
  const eventType = 'home-page-view';
  const visitorId = 'test_visitor_id';
  let stdout;

  before(async () => {
    stdout = execSync('node interactive-tutorials/events/write-user-event.js', {
      cwd,
    });
  });

  it('should check that write operation started', () => {
    const regex = new RegExp('Start to write user event', 'g');
    assert.match(stdout, regex);
  });

  it('should check that new event created correctly', () => {
    const regex = new RegExp('Operation result: .*\\n', 'g');
    assert.match(stdout, regex);
    const string = stdout
      .match(regex)
      .toString()
      .replace('Operation result: ', '');
    const event = JSON.parse(string);
    expect(event.eventType).to.be.equal(eventType);
    expect(event.visitorId).to.be.equal(visitorId);
  });

  it('should check that write operation finished', () => {
    const regex = new RegExp('Write operation finished', 'g');
    assert.match(stdout, regex);
  });

  it('should check that purge operation started', () => {
    const regex = new RegExp('Purge operation in progress', 'g');
    assert.match(stdout, regex);
  });
});
