aboutsummaryrefslogblamecommitdiffhomepage
path: root/tests/api/friendsBasic.js
blob: dbc9183830987e5a3827abafcd0134848623ab8b (plain) (tree)
1
2
3
4
5
6
7
8
9


               
                              

                            
                                    
 
                                
 
                                              


                 






















                                                                             
                                                                      


                            
                                                                         







                                                   
                                                       






                                           
              




                                               
                                           
 
















                                                             
 



                                                      
 



































                                                                          

      




                                                                      








                                                             
 


                                             
 




                                              









                                                                     


                  





                                                                   
                

        






                                   
                              





              
;(function () {
  'use strict'

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

  var utils = require('./utils')

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

    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])
      }

      utils.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()
      })
    }

    // ---------------------------------------------------------------

    before(function (done) {
      this.timeout(20000)
      utils.flushAndRunMultipleServers(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) {
        utils.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()
        })
      }, done)
    })

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

      var path = '/api/v1/pods/makefriends'

      async.series([
        // The second pod make friend with the third
        function (next) {
          request(urls[1])
            .get(path)
            .set('Accept', 'application/json')
            .expect(204)
            .end(next)
        },
        // Wait for the request between pods
        function (next) {
          setTimeout(next, 1000)
        },
        // The second pod should have the third as a friend
        function (next) {
          utils.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])

            next()
          })
        },
        // Same here, the third pod should have the second pod as a friend
        function (next) {
          utils.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])

            next()
          })
        },
        // Finally the first pod make friend with the second pod
        function (next) {
          request(urls[0])
            .get(path)
            .set('Accept', 'application/json')
            .expect(204)
            .end(next)
        },
        // Wait for the request between pods
        function (next) {
          setTimeout(next, 1000)
        }
      ],
      // Now each pod should be friend with the other ones
      function (err) {
        if (err) throw err
        async.each(urls, function (url, callback) {
          testMadeFriends(urls, url, callback)
        }, done)
      })
    })

    it('Should not be allowed to make friend again', function (done) {
      utils.makeFriends(urls[1], 409, done)
    })

    it('Should quit friends of pod 2', function (done) {
      async.series([
        // Pod 1 quit friends
        function (next) {
          utils.quitFriends(urls[1], next)
        },
        // Pod 1 should not have friends anymore
        function (next) {
          utils.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(0)

            next()
          })
        },
        // Other pods shouldn't have pod 1 too
        function (next) {
          async.each([ urls[0], urls[2] ], function (url, callback) {
            utils.getFriendsList(url, 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).not.to.be.equal(urls[1])
              callback()
            })
          }, next)
        }
      ], done)
    })

    it('Should allow pod 2 to make friend again', function (done) {
      utils.makeFriends(urls[1], function () {
        async.each(urls, function (url, callback) {
          testMadeFriends(urls, url, callback)
        }, done)
      })
    })

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

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