describe 'Courseware', ->
  describe 'start', ->
    it 'create the navigation', ->
      spyOn(window, 'Navigation')
      Courseware.start()
      expect(window.Navigation).toHaveBeenCalled()

    it 'binds the Logger', ->
      spyOn(Logger, 'bind')
      Courseware.start()
      expect(Logger.bind).toHaveBeenCalled()

  describe 'bind', ->
    beforeEach ->
      @courseware = new Courseware
      setFixtures """
        <div class="course-content">
          <div class="sequence"></div>
        </div>
        """

    it 'binds the content change event', ->
      @courseware.bind()
      expect($('.course-content .sequence')).toHandleWith 'contentChanged', @courseware.render

  describe 'render', ->
    beforeEach ->
      jasmine.stubRequests()
      @courseware = new Courseware
      spyOn(window, 'Histogram')
      spyOn(window, 'Problem')
      spyOn(window, 'Video')
      setFixtures """
        <div class="course-content">
          <div id="video_1" class="video" data-streams="1.0:abc1234"></div>
          <div id="video_2" class="video" data-streams="1.0:def5678"></div>
          <div id="problem_3" class="problems-wrapper" data-problem-id="3" data-url="/example/url/">
            <div id="histogram_3" class="histogram" data-histogram="[[0, 1]]" style="height: 20px; display: block;">
          </div>
        </div>
        """
      @courseware.render()

    it 'detect the video elements and convert them', ->
      expect(window.Video).toHaveBeenCalledWith('1', '1.0:abc1234')
      expect(window.Video).toHaveBeenCalledWith('2', '1.0:def5678')

    it 'detect the problem element and convert it', ->
      expect(window.Problem).toHaveBeenCalledWith(3, 'problem_3', '/example/url/')

    it 'detect the histrogram element and convert it', ->
      expect(window.Histogram).toHaveBeenCalledWith('3', [[0, 1]])