Skip to content

Commit

Permalink
chore(tests): Changes per Jacob's comments
Browse files Browse the repository at this point in the history
  • Loading branch information
davideast committed Jan 10, 2017
1 parent 4cdd779 commit 4b15969
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 128 deletions.
3 changes: 0 additions & 3 deletions package.json
Expand Up @@ -11,9 +11,6 @@
"bugs": {
"url": "https://github.com/firebase/angularfire/issues"
},
"scripts": {
"start": "grunt"
},
"license": "MIT",
"keywords": [
"angular",
Expand Down
69 changes: 32 additions & 37 deletions src/storage/FirebaseStorage.js
Expand Up @@ -13,48 +13,14 @@
};
}

function _$put(storageRef, file, $digestFn) {
var task = storageRef.put(file);

return {
$progress: function $progress(callback) {
task.on('state_changed', function () {
$digestFn(function () {
callback([unwrapStorageSnapshot(task.snapshot)]);
});
});
},
$error: function $error(callback) {
task.on('state_changed', function () {}, function (err) {
$digestFn(function () {
callback([err]);
});
});
},
$complete: function $complete(callback) {
task.on('state_changed', function () {}, function () {}, function () {
$digestFn(function () {
callback([unwrapStorageSnapshot(task.snapshot)]);
});
});
},
$cancel: task.cancel,
$resume: task.resume,
$pause: task.pause,
then: task.then,
catch: task.catch,
_task: task
};
}

function isStorageRef(value) {
value = value || {};
return typeof value.put === 'function';
}

function _assertStorageRef(storageRef) {
if (!isStorageRef(storageRef)) {
throw new Error('$firebaseStorage expects a storage reference from firebase.storage().ref()');
throw new Error('$firebaseStorage expects a Storage reference');
}
}

Expand All @@ -64,7 +30,37 @@
_assertStorageRef(storageRef);
return {
$put: function $put(file) {
return Storage.utils._$put(storageRef, file, $firebaseUtils.compile);
var task = storageRef.put(file);

return {
$progress: function $progress(callback) {
task.on('state_changed', function () {
$firebaseUtils.compile(function () {
callback(unwrapStorageSnapshot(task.snapshot));
});
});
},
$error: function $error(callback) {
task.on('state_changed', null, function (err) {
$firebaseUtils.compile(function () {
callback(err);
});
});
},
$complete: function $complete(callback) {
task.on('state_changed', null, null, function () {
$firebaseUtils.compile(function () {
callback(unwrapStorageSnapshot(task.snapshot));
});
});
},
$cancel: task.cancel,
$resume: task.resume,
$pause: task.pause,
then: task.then,
catch: task.catch,
_task: task
};
},
$getDownloadURL: function $getDownloadURL() {
return $q.when(storageRef.getDownloadURL());
Expand All @@ -83,7 +79,6 @@

Storage.utils = {
_unwrapStorageSnapshot: unwrapStorageSnapshot,
_$put: _$put,
_isStorageRef: isStorageRef,
_assertStorageRef: _assertStorageRef
};
Expand Down
5 changes: 4 additions & 1 deletion src/storage/FirebaseStorageDirective.js
Expand Up @@ -11,7 +11,10 @@
// $observe is like $watch but it waits for interpolation
// Ex: <img firebase-src="{{ myUrl }}"/>
attrs.$observe('firebaseSrc', function (newFirebaseSrcVal) {
if (newFirebaseSrcVal !== '' && newFirebaseSrcVal !== null && newFirebaseSrcVal !== undefined) {
if (newFirebaseSrcVal !== '' &&
newFirebaseSrcVal !== null &&
newFirebaseSrcVal !== undefined &&
typeof newFirebaseSrcVal === 'string') {
var storageRef = firebase.storage().ref(newFirebaseSrcVal);
var storage = $firebaseStorage(storageRef);
storage.$getDownloadURL().then(function getDownloadURL(url) {
Expand Down
Empty file removed tests/protractor/upload/upload.css
Empty file.
2 changes: 0 additions & 2 deletions tests/protractor/upload/upload.html
Expand Up @@ -15,8 +15,6 @@
<!-- Initialize the Firebase SDK -->
<script src="../../initialize.js"></script>

<!-- Custom CSS -->
<link rel="stylesheet" href="upload.css">
</head>

<body ng-controller="UploadCtrl">
Expand Down
39 changes: 16 additions & 23 deletions tests/protractor/upload/upload.manual.js
Expand Up @@ -10,9 +10,6 @@ describe('Upload App', function () {
// Boolean used to load the page on the first test only
var isPageLoaded = false;

// Reference to the messages repeater
var messages = element.all(by.repeater('message in messages'));

var flow = protractor.promise.controlFlow();

function waitOne() {
Expand All @@ -26,7 +23,7 @@ describe('Upload App', function () {
function clearFirebaseRef() {
var deferred = protractor.promise.defer();

firebaseRef.remove(function(err) {
firebaseRef.remove(function (err) {
if (err) {
deferred.reject(err);
} else {
Expand All @@ -53,25 +50,21 @@ describe('Upload App', function () {
expect(browser.getTitle()).toEqual('AngularFire Upload e2e Test');
});

it('starts with an empty list of messages', function () {
expect(messages.count()).toBe(0);
});

it('uploads a file', function (done) {
var fileToUpload = './upload/logo.png',
absolutePath = path.resolve(__dirname, fileToUpload);

$('input[type="file"]').sendKeys(absolutePath);
$('#submit').click();

var el = element(by.id('url'));
browser.driver.wait(protractor.until.elementIsVisible(el))
.then(function () {
return el.getText();
}).then(function (text) {
var result = "https://firebasestorage.googleapis.com/v0/b/oss-test.appspot.com/o/user%2F1.png";
expect(text.slice(0, result.length)).toEqual(result);
done();
});
var fileToUpload = './upload/logo.png';
var absolutePath = path.resolve(__dirname, fileToUpload);

$('input[type="file"]').sendKeys(absolutePath);
$('#submit').click();

var el = element(by.id('url'));
browser.driver.wait(protractor.until.elementIsVisible(el))
.then(function () {
return el.getText();
}).then(function (text) {
var result = "https://firebasestorage.googleapis.com/v0/b/oss-test.appspot.com/o/user%2F1.png";
expect(text.slice(0, result.length)).toEqual(result);
done();
});
});
});
118 changes: 56 additions & 62 deletions tests/unit/FirebaseStorage.spec.js
Expand Up @@ -33,6 +33,13 @@ describe('$firebaseStorage', function () {
expect(storage).not.toBe(null);
});

it('should throw error given a non-reference', () => {
function errorWrapper() {
var storage = $firebaseStorage(null);
}
expect(errorWrapper).toThrow();
});

describe('$firebaseStorage.utils', function () {

describe('_unwrapStorageSnapshot', function () {
Expand All @@ -45,32 +52,74 @@ describe('$firebaseStorage', function () {
ref: {},
state: {},
task: {},
totalBytes: 0
totalBytes: 0,
randomAttr: 'rando', // gets removed
anotherRando: 'woooo' // gets removed
};
var unwrapped = $firebaseStorage.utils._unwrapStorageSnapshot(mockSnapshot);
expect(mockSnapshot).toEqual(unwrapped);
expect(unwrapped).toEqual({
bytesTransferred: 0,
downloadURL: 'url',
metadata: {},
ref: {},
state: {},
task: {},
totalBytes: 0
});
});

});

describe('_isStorageRef', function () {

it('should determine a storage ref', function () {
var ref = firebase.storage().ref('thing');
var isTrue = $firebaseStorage.utils._isStorageRef(ref);
var isFalse = $firebaseStorage.utils._isStorageRef(true);
expect(isTrue).toEqual(true);
expect(isFalse).toEqual(false);
});

});

describe('_assertStorageRef', function () {
it('should not throw an error if a storage ref is passed', function () {
var ref = firebase.storage().ref('thing');
function errorWrapper() {
$firebaseStorage.utils._assertStorageRef(ref);
}
expect(errorWrapper).not.toThrow();
});

it('should throw an error if a storage ref is passed', function () {
function errorWrapper() {
$firebaseStorage.utils._assertStorageRef(null);
}
expect(errorWrapper).toThrow();
});
});

describe('_$put', function () {
});

describe('$firebaseStorage', function() {

describe('$put', function() {

function setupPutTests(file, mockTask) {
var ref = firebase.storage().ref('thing');
var task = null;
var digestFn = $firebaseUtils.compile;
var storage = $firebaseStorage(ref);
// If a MockTask is provided use it as the
// return value of the spy on put
if (mockTask) {
spyOn(ref, 'put').and.returnValue(mockTask);
} else {
spyOn(ref, 'put');
}
task = $firebaseStorage.utils._$put(ref, file, digestFn);
task = storage.$put(file);
return {
ref: ref,
task: task,
digestFn: digestFn
task: task
};
}

Expand Down Expand Up @@ -152,57 +201,6 @@ describe('$firebaseStorage', function () {

});

describe('_isStorageRef', function () {

it('should determine a storage ref', function () {
var ref = firebase.storage().ref('thing');
var isTrue = $firebaseStorage.utils._isStorageRef(ref);
var isFalse = $firebaseStorage.utils._isStorageRef(true);
expect(isTrue).toEqual(true);
expect(isFalse).toEqual(false);
});

});

describe('_assertStorageRef', function () {
it('should not throw an error if a storage ref is passed', function () {
var ref = firebase.storage().ref('thing');
function errorWrapper() {
$firebaseStorage.utils._assertStorageRef(ref);
}
expect(errorWrapper).not.toThrow();
});

it('should throw an error if a storage ref is passed', function () {
function errorWrapper() {
$firebaseStorage.utils._assertStorageRef(null);
}
expect(errorWrapper).toThrow();
});
});

});

describe('$firebaseStorage', function() {

describe('$put', function() {

it('should call the _$put method', function() {
// test that $firebaseStorage.utils._$put is called with
// - storageRef, file, $firebaseUtils.compile, $q
var ref = firebase.storage().ref('thing');
var storage = $firebaseStorage(ref);
var fakePromise = $q(function(resolve, reject) {
resolve('file');
});
spyOn(ref, 'put');
spyOn($firebaseStorage.utils, '_$put').and.returnValue(fakePromise);
storage.$put('file'); // don't ever call this with a string IRL
expect($firebaseStorage.utils._$put).toHaveBeenCalledWith(ref, 'file', $firebaseUtils.compile);
})

});

describe('$getDownloadURL', function() {
it('should call the ref getDownloadURL method', function() {
var ref = firebase.storage().ref('thing');
Expand All @@ -215,12 +213,8 @@ describe('$firebaseStorage', function () {

describe('$delete', function() {
it('should call the storage ref delete method', function() {
// test that $firebaseStorage.$delete() calls storageRef.delete()
var ref = firebase.storage().ref('thing');
var storage = $firebaseStorage(ref);
var fakePromise = $q(function(resolve, reject) {
resolve();
});
spyOn(ref, 'delete');
storage.$delete();
expect(ref.delete).toHaveBeenCalled();
Expand Down

0 comments on commit 4b15969

Please sign in to comment.