aboutsummaryrefslogblamecommitdiffhomepage
path: root/test/api/friends.js
blob: 033d3799a2961b56528efc4ed8f52148e39d3975 (plain) (tree)




















































































































































                                                                                
;(function () {
  'use strict'

  var request = require('supertest')
  var chai = require('chai')
  var expect = chai.expect
  var async = require('async')

  var utils = require('../utils')

  function getFriendsList (url, end) {
    var path = '/api/pods/'

    request(url)
      .get(path)
      .set('Accept', 'application/json')
      .expect(200)
      .expect('Content-Type', /json/)
      .end(end)
  }

  describe('Test friends', function () {
    var apps = []
    var urls = []

    before(function (done) {
      this.timeout(20000)
      utils.runMultipleServers(3, function (apps_run, urls_run) {
        apps = apps_run
        urls = urls_run
        done()
      })
    })

    it('Should not have friends', function (done) {
      async.each(urls, function (url, callback) {
        getFriendsList(url, function (err, res) {
          if (err) throw err

          var result = res.body
          expect(result).to.be.an('array')
          expect(result.length).to.equal(0)
          callback()
        })
      }, function (err) {
        if (err) throw err

        done()
      })
    })

    it('Should make friends', function (done) {
      this.timeout(10000)

      function testMadeFriends (urls, url_to_test, callback) {
        var friends = []
        for (var i = 0; i < urls.length; i++) {
          if (urls[i] === url_to_test) continue
          friends.push(urls[i])
        }

        getFriendsList(url_to_test, function (err, res) {
          if (err) throw err

          var result = res.body
          var result_urls = [ result[0].url, result[1].url ]
          expect(result).to.be.an('array')
          expect(result.length).to.equal(2)
          expect(result_urls[0]).to.not.equal(result_urls[1])

          var error_string = 'Friends url do not correspond for ' + url_to_test
          expect(friends).to.contain(result_urls[0], error_string)
          expect(friends).to.contain(result_urls[1], error_string)
          callback()
        })
      }

      var path = '/api/pods/makefriends'

      // The second pod make friend with the third
      request(urls[1])
        .get(path)
        .set('Accept', 'application/json')
        .expect(204)
        .end(function (err, res) {
          if (err) throw err

          // Wait for the request between pods
          setTimeout(function () {
            // The second pod should have the third as a friend
            getFriendsList(urls[1], function (err, res) {
              if (err) throw err

              var result = res.body
              expect(result).to.be.an('array')
              expect(result.length).to.equal(1)
              expect(result[0].url).to.be.equal(urls[2])

              // Same here, the third pod should have the second pod as a friend
              getFriendsList(urls[2], function (err, res) {
                if (err) throw err

                var result = res.body
                expect(result).to.be.an('array')
                expect(result.length).to.equal(1)
                expect(result[0].url).to.be.equal(urls[1])

                // Finally the first pod make friend with the second pod
                request(urls[0])
                  .get(path)
                  .set('Accept', 'application/json')
                  .expect(204)
                  .end(function (err, res) {
                    if (err) throw err

                    setTimeout(function () {
                      // Now each pod should be friend with the other ones
                      async.each(urls, function (url, callback) {
                        testMadeFriends(urls, url, callback)
                      }, function (err) {
                        if (err) throw err
                        done()
                      })
                    }, 1000)
                  })
              })
            })
          }, 1000)
        })
    })

    // TODO
    it('Should not be able to make friends again')

    after(function (done) {
      apps.forEach(function (app) {
        process.kill(-app.pid)
      })

      if (this.ok) {
        utils.flushTests(function () {
          done()
        })
      } else {
        done()
      }
    })
  })
})()