sosoreads
Version:
Another Node Goodreads wrapper
163 lines (132 loc) • 3.8 kB
JavaScript
const reviews = require('../resources/reviews')();
const config = require('../config.json');
// test options
let ascendingOptions = {
"userId": "4812558",
"sort": {
"field": "title",
"order": "asc"
}
};
let badSortFieldOptions = {
"userId": "4812558",
"sort": {
"field": "asdf"
}
};
let badSortOrderOptions = {
"userId": "4812558",
"sort": {
"field": "title",
"order": "asdf"
}
};
let descendingOptions = {
"userId": "4812558",
"sort": {
"field": "title",
"order": "desc"
}
};
let fullOptions = {
"userId": "4812558",
"paging": {
"count": 30,
"number": 1
},
"searchQuery": "iliad",
"shelf": "to-read",
"sort": {
"field": "title",
"order": "asc"
}
};
let highPagingCountOptions = {
"userId": "4812558",
"paging": {
"count": 201,
"number": 1
}
};
let lowPagingCountOptions = {
"userId": "4812558",
"paging": {
"count": 0,
"number": 1
}
};
let minimumOptions = {
"userId": "4812558"
};
let noUserIdOptions = {
"paging": {
"count": 30,
"number": 1
},
"searchQuery": "iliad",
"shelf": "to-read",
"sort": {
"field": "title",
"order": "desc"
}
};
// test results
let fullParams = {
"v": 2,
"id": "4812558",
"shelf": "to-read",
"sort": "title",
"search[query]": "iliad",
"order": config.ascendingGoodreads,
"page": 1,
"per_page": 30
}
let minimumParams = {
"v": 2,
"id": "4812558",
"sort": config.reviews.defaultSortField,
"order": config.descendingGoodreads
};
// tests
test('reviews validates required fields', () => {
expect(reviews.validateOptions(minimumOptions)).toBe(true);
});
test('reviews validates all possible fields', () => {
expect(reviews.validateOptions(fullOptions)).toBe(true);
});
test('reviews fails without options', () => {
expect(() => reviews.validateOptions()).toThrow(Error);
});
test('reviews fails without User ID', () => {
expect(() => reviews.validateOptions(noUserIdOptions)).toThrow(Error);
});
test('reviews fails with invalid sort.field', () => {
expect(() => reviews.validateOptions(badSortFieldOptions)).toThrow(Error);
});
test('reviews fails with invalid sort.order', () => {
expect(() => reviews.validateOptions(badSortOrderOptions)).toThrow(Error);
});
test('reviews fails with paging.count under 1', () => {
expect(() => reviews.validateOptions(lowPagingCountOptions)).toThrow(Error);
});
test('reviews fails with paging.count over limit', () => {
expect(() => reviews.validateOptions(highPagingCountOptions)).toThrow(Error);
});
test('reviews uses default sort field', () => {
expect(reviews.getRequestParams(minimumOptions).sort).toBe(config.reviews.defaultSortField);
});
test('reviews uses default sort order', () => {
expect(reviews.getRequestParams(minimumOptions).order).toBe(config.descendingGoodreads);
});
test('reviews ascending order uses Goodreads ascending order', () => {
expect(reviews.getRequestParams(ascendingOptions).order).toBe(config.ascendingGoodreads);
});
test('reviews descending order uses Goodreads descending order', () => {
expect(reviews.getRequestParams(descendingOptions).order).toBe(config.descendingGoodreads);
});
test('reviews creates minimum params', () => {
expect(reviews.getRequestParams(minimumOptions)).toEqual(minimumParams);
});
test('reviews creates full params', () => {
expect(reviews.getRequestParams(fullOptions)).toEqual(fullParams);
});