From 2bc8cc01a588347542b2320e17fdee8ad46070a7 Mon Sep 17 00:00:00 2001 From: Russell Horton Date: Thu, 20 Dec 2012 14:38:15 -0800 Subject: [PATCH] tests for python3 wordnik.com api client --- .../python3/tests/AccountApiTest.py | 56 ++++++++++ .../wordnik-api/python3/tests/BaseApiTest.py | 45 ++++++++ .../wordnik-api/python3/tests/WordApiTest.py | 91 ++++++++++++++++ .../python3/tests/WordListApiTest.py | 103 ++++++++++++++++++ .../wordnik-api/python3/tests/WordsApiTest.py | 47 ++++++++ 5 files changed, 342 insertions(+) create mode 100644 samples/client/wordnik-api/python3/tests/AccountApiTest.py create mode 100644 samples/client/wordnik-api/python3/tests/BaseApiTest.py create mode 100644 samples/client/wordnik-api/python3/tests/WordApiTest.py create mode 100644 samples/client/wordnik-api/python3/tests/WordListApiTest.py create mode 100644 samples/client/wordnik-api/python3/tests/WordsApiTest.py diff --git a/samples/client/wordnik-api/python3/tests/AccountApiTest.py b/samples/client/wordnik-api/python3/tests/AccountApiTest.py new file mode 100644 index 00000000000..ea8384b1105 --- /dev/null +++ b/samples/client/wordnik-api/python3/tests/AccountApiTest.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +import sys +import unittest +import urllib.request, urllib.error, urllib.parse +import json + +from BaseApiTest import BaseApiTest + +sys.path = ['./'] + sys.path +from wordnik import * + + +class AccountApiTest(BaseApiTest): + + def setUp(self): + super(AccountApiTest, self).setUp() + self.authToken = self.accountApi.authenticate(self.username, + self.password).token + + def testAuthenticate(self): + res = self.accountApi.authenticate(self.username, self.password) + assert res, 'null authenticate result' + assert res.token, 'invalid authentication token' + assert res.userId != 0, 'userId was 0' + assert res.userSignature, 'invalid userSignature' + + def testAuthenticatePost(self): + res = self.accountApi.authenticatePost(self.username, self.password) + assert res, 'null authenticate result' + assert res.token, 'invalid authentication token' + assert res.userId != 0, 'userId was 0' + assert res.userSignature, 'invalid userSignature' + + def testGetWordListsForLoggedInUser(self): + res = self.accountApi.getWordListsForLoggedInUser(self.authToken) + assert res, 'null getWordListsForLoggedInUser result' + assert len(res) != 0, 'number of lists shouldn\'t be 0' + + def testGetApiTokenStatus(self): + res = self.accountApi.getApiTokenStatus() + assert res, 'null getApiTokenStatus result' + assert res.valid, 'token status not valid' + assert res.remainingCalls != 0, 'remainingCalls shouldn\'t be 0' + + def testGetLoggedInUser(self): + res = self.accountApi.getLoggedInUser(self.authToken) + assert res, 'null getLoggedInUser result' + assert res.id != 0, 'if shouldn\'t be 0' + assert res.username == self.username, 'username was incorrect' + assert res.status == 0, 'user status should be 0' + assert res.email, 'email shouldn\'t be null' + + +if __name__ == "__main__": + unittest.main() diff --git a/samples/client/wordnik-api/python3/tests/BaseApiTest.py b/samples/client/wordnik-api/python3/tests/BaseApiTest.py new file mode 100644 index 00000000000..6f8db63247d --- /dev/null +++ b/samples/client/wordnik-api/python3/tests/BaseApiTest.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +"""Unit tests for Python Wordnik API client. + +Requires you to set four environment varibales: + WN_APIKEY your API key + WN_APIURL the API base url + WN_USERNAME the username of a user + WN_PASSWORD the user's password + +Run all tests: + + python BaseApiTest.py + +""" + +import sys +import os +import unittest + +sys.path = ['./'] + sys.path +from wordnik import * + + +class BaseApiTest(unittest.TestCase): + + def setUp(self): + self.apiUrl = 'http://api.wordnik.com/v4' + self.apiKey = os.environ.get('API_KEY') + self.username = os.environ.get('USER_NAME') + self.password = os.environ.get('PASSWORD') + + client = swagger.ApiClient(self.apiKey, self.apiUrl) + self.accountApi = AccountApi.AccountApi(client) + self.wordApi = WordApi.WordApi(client) + self.wordListApi = WordListApi.WordListApi(client) + self.wordsApi = WordsApi.WordsApi(client) + +if __name__ == "__main__": + + from AccountApiTest import AccountApiTest + from WordApiTest import WordApiTest + from WordListApiTest import WordListApiTest + from WordsApiTest import WordsApiTest + + unittest.main() diff --git a/samples/client/wordnik-api/python3/tests/WordApiTest.py b/samples/client/wordnik-api/python3/tests/WordApiTest.py new file mode 100644 index 00000000000..7be40634c66 --- /dev/null +++ b/samples/client/wordnik-api/python3/tests/WordApiTest.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python + +import sys +import unittest +import urllib.request, urllib.error, urllib.parse +import json + +from BaseApiTest import BaseApiTest + +sys.path = ['./'] + sys.path +from wordnik import * + + +class WordApiTest(BaseApiTest): + + def testWordApis(self): + url = 'http://api.wordnik.com/v4/word.json' + request = urllib.request.urlopen(url) + encoding = request.headers.get_content_charset() + if not encoding: + encoding = 'iso-8859-1' + response = request.read().decode(encoding) + doc = json.loads(response) + assert len(doc['apis']) == 12, 'there should be 12 word apis' + + def testGetWord(self): + res = self.wordApi.getWord('cat') + assert res, 'null getWord result' + assert res.word == 'cat', 'word should be "cat"' + + def testGetWordWithSuggestions(self): + res = self.wordApi.getWord('cAt', includeSuggestions=True) + assert res, 'null getWord result' + assert res.word == 'cAt', 'word should be "cAt"' + + def testGetWordWithCanonicalForm(self): + res = self.wordApi.getWord('cAt', useCanonical=True) + assert res, 'null getWord result' + assert res.word == 'cat', 'word should be "cAt"' + + def testGetDefinitions(self): + res = self.wordApi.getDefinitions('cat', limit=10) + assert res, 'null getDefinitions result' + assert len(res) == 10, 'should have 10 definitions' + + def testGetExamples(self): + res = self.wordApi.getExamples('cat', limit=5) + assert res, 'null getExamples result' + assert len(res.examples) == 5, 'should have 5 definitions' + + def testGetTopExample(self): + res = self.wordApi.getTopExample('cat') + assert res, 'null getTopExample result' + assert res.word == 'cat', 'word should be "cat"' + + def testGetHyphenation(self): + res = self.wordApi.getHyphenation('catalog', limit=1) + assert res, 'null getHyphenation result' + assert len(res) == 1, 'hypenation length should be 1' + + def testGetWordFrequency(self): + res = self.wordApi.getWordFrequency('cat') + assert res, 'null getWordFrequency result' + assert res.totalCount != 0, 'total count should not be 0' + + def testGetPhrases(self): + res = self.wordApi.getPhrases('money') + assert res, 'null getPhrases result' + assert len(res) != 0, 'getPhrases length should not be 0' + + def testGetRelatedWords(self): + res = self.wordApi.getRelatedWords('cat') + assert res, 'null getRelatedWords result' + for related in res: + assert len(related.words) <= 10, 'should have <= 10 related words' + + def testGetAudio(self): + res = self.wordApi.getAudio('cat', useCanonical=True, limit=2) + assert res, 'null getAudio result' + assert len(res) == 2, 'getAudio size should be 2' + + def testGetScrabbleScore(self): + res = self.wordApi.getScrabbleScore('quixotry') + assert res.value == 27, 'quixotry should have a Scrabble score of 27' + + def testGetEtymologies(self): + res = self.wordApi.getEtymologies('butter') + assert 'of Scythian origin' in res[0], 'etymology of "butter" should contain the phrase "of Scythian origin"' + +if __name__ == "__main__": + unittest.main() diff --git a/samples/client/wordnik-api/python3/tests/WordListApiTest.py b/samples/client/wordnik-api/python3/tests/WordListApiTest.py new file mode 100644 index 00000000000..cdf651b40fa --- /dev/null +++ b/samples/client/wordnik-api/python3/tests/WordListApiTest.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +import sys +import unittest +import urllib.request, urllib.error, urllib.parse +import json + +from BaseApiTest import BaseApiTest + +sys.path = ['./'] + sys.path +from wordnik import * + + +class WordListApiTest(BaseApiTest): + + def setUp(self): + super(WordListApiTest, self).setUp() + self.authToken = self.accountApi.authenticate(self.username, + self.password).token + self.existingList = self.accountApi.getWordListsForLoggedInUser(self.authToken, + limit=1)[0] + + from wordnik.models import WordList + wordList = WordList.WordList() + wordList.name = "my test list" + wordList.type = "PUBLIC" + wordList.description = "some words I want to play with" + + # sampleList = self.wordListApi.createWordList(wordList, + # self.authToken) + + # if not sampleList: + # raise Exception("can't create test list to run tests with") + + def testGetWordListByPermalink(self): + res = self.wordListApi.getWordListByPermalink(self.existingList.permalink, + self.authToken) + assert res, 'null getWordListByPermalink result' + + def testGetWordListByPermalink(self): + res = self.wordListApi.getWordListByPermalink(self.existingList.permalink, + self.authToken) + assert res, 'null getWordListByPermalink result' + + def testUpdateWordList(self): + import time + description = 'list updated at ' + str(time.time()) + self.existingList.description = description + self.wordListApi.updateWordList(self.existingList.permalink, + self.authToken, body=self.existingList) + + res = self.wordListApi.getWordListByPermalink(self.existingList.permalink, + self.authToken) + + assert res.description == description, 'did not update wordlist' + + def testAddWordsToWordList(self): + + from wordnik.models import StringValue + wordsToAdd = [] + word1 = StringValue.StringValue() + word1.word = "delicious" + wordsToAdd.append(word1) + word2 = StringValue.StringValue() + word2.word = "tasty" + wordsToAdd.append(word2) + word3 = StringValue.StringValue() + word3.word = "scrumptious" + wordsToAdd.append(word3) + self.wordListApi.addWordsToWordList(self.existingList.permalink, + self.authToken, body=wordsToAdd) + + res = self.wordListApi.getWordListWords(self.existingList.permalink, + self.authToken) + listSet = set([word.word for word in res]) + addedSet = set(["delicious", "tasty", "scrumptious"]) + assert len(listSet.intersection(addedSet)) == 3, 'did not get added words' + + def testDeleteWordsFromList(self): + from wordnik.models import StringValue + wordsToRemove = [] + word1 = StringValue.StringValue() + word1.word = "delicious" + wordsToRemove.append(word1) + word2 = StringValue.StringValue() + word2.word = "tasty" + wordsToRemove.append(word2) + word3 = StringValue.StringValue() + word3.word = "scrumptious" + wordsToRemove.append(word3) + self.wordListApi.deleteWordsFromWordList(self.existingList.permalink, + self.authToken, + body=wordsToRemove) + + res = self.wordListApi.getWordListWords(self.existingList.permalink, + self.authToken) + listSet = set([word.word for word in res]) + addedSet = set(["delicious", "tasty", "scrumptious"]) + assert len(listSet.intersection(addedSet)) == 0, 'did not get removed words' + + +if __name__ == "__main__": + unittest.main() diff --git a/samples/client/wordnik-api/python3/tests/WordsApiTest.py b/samples/client/wordnik-api/python3/tests/WordsApiTest.py new file mode 100644 index 00000000000..d11240eb6be --- /dev/null +++ b/samples/client/wordnik-api/python3/tests/WordsApiTest.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +import sys +import unittest +import urllib.request, urllib.error, urllib.parse +import json + +from BaseApiTest import BaseApiTest + +sys.path = ['./'] + sys.path +from wordnik import * + + +class WordsApiTest(BaseApiTest): + + def testSearchWords(self): + res = self.wordsApi.searchWords('tree') + assert res, 'null search result' + assert res.searchResults[0].word == 'tree', 'word should be "tree"' + assert res.totalResults != 0, 'should not have 0 results' + + def testGetWordOfTheDay(self): + res = self.wordsApi.getWordOfTheDay() + assert res, 'null wordOfTheDay result' + + def testReverseDictionary(self): + res = self.wordsApi.reverseDictionary("hairy") + assert res, 'null reverseDictionary result' + assert res.totalResults != 0, 'should not have 0 results' + assert len(res.results) != 0, 'should not have 0 results' + + def testGetRandomWords(self): + res = self.wordsApi.getRandomWords() + assert res, 'null getRandomWords result' + assert len(res) == 10, 'should get 10 random words' + + def testGetRandomWords(self): + res = self.wordsApi.getRandomWords() + assert res, 'null getRandomWord result' + + def testGetRandomWord(self): + res = self.wordsApi.getRandomWords() + assert res, 'null getRandomWord result' + + +if __name__ == "__main__": + unittest.main()