From ac9e65a9b9fdc8964f4891eedd51ed57aa5ee22b Mon Sep 17 00:00:00 2001
From: Eric Eastwood <contact@ericeastwood.com>
Date: Fri, 15 Dec 2017 01:10:34 -0600
Subject: [PATCH] Switch blob/notebook to Axios

---
 app/assets/javascripts/blob/notebook/index.js | 14 +++---
 spec/javascripts/blob/notebook/index_spec.js  | 48 +++++++------------
 2 files changed, 23 insertions(+), 39 deletions(-)

diff --git a/app/assets/javascripts/blob/notebook/index.js b/app/assets/javascripts/blob/notebook/index.js
index c858a6bb7b4..57b031956e8 100644
--- a/app/assets/javascripts/blob/notebook/index.js
+++ b/app/assets/javascripts/blob/notebook/index.js
@@ -1,10 +1,8 @@
 /* eslint-disable no-new */
 import Vue from 'vue';
-import VueResource from 'vue-resource';
+import axios from '../../lib/utils/axios_utils';
 import notebookLab from '../../notebook/index.vue';
 
-Vue.use(VueResource);
-
 export default () => {
   const el = document.getElementById('js-notebook-viewer');
 
@@ -50,14 +48,14 @@ export default () => {
     `,
     methods: {
       loadFile() {
-        this.$http.get(el.dataset.endpoint)
-          .then(response => response.json())
-          .then((res) => {
-            this.json = res;
+        axios.get(el.dataset.endpoint)
+          .then(res => res.data)
+          .then((data) => {
+            this.json = data;
             this.loading = false;
           })
           .catch((e) => {
-            if (e.status) {
+            if (e.status !== 200) {
               this.loadError = true;
             }
 
diff --git a/spec/javascripts/blob/notebook/index_spec.js b/spec/javascripts/blob/notebook/index_spec.js
index c3e67550f05..df1b2c9960b 100644
--- a/spec/javascripts/blob/notebook/index_spec.js
+++ b/spec/javascripts/blob/notebook/index_spec.js
@@ -1,4 +1,5 @@
-import Vue from 'vue';
+import MockAdapter from 'axios-mock-adapter';
+import axios from '~/lib/utils/axios_utils';
 import renderNotebook from '~/blob/notebook';
 
 describe('iPython notebook renderer', () => {
@@ -17,8 +18,11 @@ describe('iPython notebook renderer', () => {
   });
 
   describe('successful response', () => {
-    const response = (request, next) => {
-      next(request.respondWith(JSON.stringify({
+    let mock;
+
+    beforeEach((done) => {
+      mock = new MockAdapter(axios);
+      mock.onGet('/test').reply(200, {
         cells: [{
           cell_type: 'markdown',
           source: ['# test'],
@@ -31,13 +35,7 @@ describe('iPython notebook renderer', () => {
           ],
           outputs: [],
         }],
-      }), {
-        status: 200,
-      }));
-    };
-
-    beforeEach((done) => {
-      Vue.http.interceptors.push(response);
+      });
 
       renderNotebook();
 
@@ -47,9 +45,7 @@ describe('iPython notebook renderer', () => {
     });
 
     afterEach(() => {
-      Vue.http.interceptors = _.without(
-        Vue.http.interceptors, response,
-      );
+      mock.reset();
     });
 
     it('does not show loading icon', () => {
@@ -86,14 +82,11 @@ describe('iPython notebook renderer', () => {
   });
 
   describe('error in JSON response', () => {
-    const response = (request, next) => {
-      next(request.respondWith('{ "cells": [{"cell_type": "markdown"} }', {
-        status: 200,
-      }));
-    };
+    let mock;
 
     beforeEach((done) => {
-      Vue.http.interceptors.push(response);
+      mock = new MockAdapter(axios);
+      mock.onGet('/test').reply(() => Promise.reject({ status: 200, data: '{ "cells": [{"cell_type": "markdown"} }' }));
 
       renderNotebook();
 
@@ -103,9 +96,7 @@ describe('iPython notebook renderer', () => {
     });
 
     afterEach(() => {
-      Vue.http.interceptors = _.without(
-        Vue.http.interceptors, response,
-      );
+      mock.reset();
     });
 
     it('does not show loading icon', () => {
@@ -122,14 +113,11 @@ describe('iPython notebook renderer', () => {
   });
 
   describe('error getting file', () => {
-    const response = (request, next) => {
-      next(request.respondWith('', {
-        status: 500,
-      }));
-    };
+    let mock;
 
     beforeEach((done) => {
-      Vue.http.interceptors.push(response);
+      mock = new MockAdapter(axios);
+      mock.onGet('/test').reply(500, '');
 
       renderNotebook();
 
@@ -139,9 +127,7 @@ describe('iPython notebook renderer', () => {
     });
 
     afterEach(() => {
-      Vue.http.interceptors = _.without(
-        Vue.http.interceptors, response,
-      );
+      mock.reset();
     });
 
     it('does not show loading icon', () => {
-- 
2.30.9