text: const errors = require('@tryghost/errors');
  const should = require('should');
  const sinon = require('sinon');
  const Promise = require('bluebird');
  const moment = require('moment');
  const testUtils = require('../../../../utils');
  const models = require('../../../../../core/server/models');
  const events = require('../../../../../core/server/lib/common/events');
  const schedulingUtils = require('../../../../../core/server/adapters/scheduling/utils');
  const SchedulingDefault = require('../../../../../core/server/adapters/scheduling/SchedulingDefault');
  const urlUtils = require('../../../../../core/shared/url-utils');
  const PostScheduler = require('../../../../../core/server/adapters/scheduling/post-scheduling/post-scheduler');
  
  describe('Scheduling: Post Scheduler', function () {
      let adapter;
  
      before(function () {
          models.init();
      });
  
      beforeEach(function () {
          adapter = new SchedulingDefault();
  
          sinon.stub(schedulingUtils, 'createAdapter').returns(Promise.resolve(adapter));
  
          sinon.spy(adapter, 'schedule');
          sinon.spy(adapter, 'unschedule');
      });
  
      afterEach(function () {
          sinon.restore();
      });
  
      describe('fn:constructor', function () {
          describe('success', function () {
              it('will be scheduled', async function () {
                  const post = models.Post.forge(testUtils.DataGenerator.forKnex.createPost({
                      id: 1337,
                      mobiledoc: testUtils.DataGenerator.markdownToMobiledoc('something')
                  }));
  
                  new PostScheduler({
                      apiUrl: 'localhost:1111/',
                      integration: {
                          api_keys: [{
                              id: 'integrationUniqueId',
                              secret: 'super-secret'
                          }]
                      },
                      adapter,
                      scheduledResources: {
                          posts: []
                      },
                      events
                  });
  
                  events.emit('post.scheduled', post);
  
                  // let the events bubble up
                  await Promise.delay(100);
  
                  adapter.schedule.called.should.eql(true);
  
                  adapter.schedule.calledOnce.should.eql(true);
  
                  adapter.schedule.args[0][0].time.should.equal(moment(post.get('published_at')).valueOf());
                  adapter.schedule.args[0][0].url.should.startWith(urlUtils.urlJoin('localhost:1111/', 'schedules', 'posts', post.get('id'), '?token='));
                  adapter.schedule.args[0][0].extra.httpMethod.should.eql('PUT');
                  should.equal(null, adapter.schedule.args[0][0].extra.oldTime);
              });
          });
  
          describe('error', function () {
              it('no apiUrl parameter passed', function () {
                  try {
                      new PostScheduler();
                      throw new Error('should have thrown');
                  } catch (err) {
                      (err instanceof errors.IncorrectUsageError).should.eql(true);
                  }
              });
          });
      });
  });
  