8000 Cleaned up the tests by moving v10 tests into their own class. Works … · Lakkichand/document-api-python@6ea5578 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6ea5578

Browse files
committed
Cleaned up the tests by moving v10 tests into their own class. Works for now. Also added the ConnectionParser tests and added it to the __init__ file to make it importable. There are probaly redundant tests now, but they're still less than a second so oh well for now. ConnectionParser is responsible for extracting the connection elements from the Datasource XML. I'm debating making the interface consistent so that ._connection always returns a list, even if it's just one element... That can be another checkin
1 parent e0ceed5 commit 6ea5578

File tree

3 files changed

+45
-43
lines changed

3 files changed

+45
-43
lines changed

tableaudocumentapi/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
__version__ = '0.0.1'
22
__VERSION__ = __version__
33
from .connection import Connection
4-
from .datasource import Datasource
4+
from .datasource import Datasource, ConnectionParser
55
from .workbook import Workbook

tableaudocumentapi/datasource.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ def __init__(self, datasource_xml, version):
1212
self._dsxml = datasource_xml
1313
self._dsversion = version
1414

15+
def _extract_federated_connections(self):
16+
return list(map(Connection,self._dsxml.findall('.//named-connections/named-connection/*')))
17+
18+
def _extract_legacy_connection(self):
19+
return Connection(self._dsxml.find('connection'))
20+
1521
def get_connections(self):
1622
if float(self._dsversion) < 10:
1723
connections = self._extract_legacy_connection()
1824
else:
1925
connections = self._extract_federated_connections()
2026
return connections
2127

22-
def _extract_federated_connections(self):
23-
return list(map(Connection,self._dsxml.findall('.//named-connections/named-connection/*')))
24-
25-
def _extract_legacy_connection(self):
26-
return Connection(self._dsxml.find('connection'))
27-
2828

2929
class Datasource(object):
3030
"""

test.py

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,20 @@
33
import os
44
import xml.etree.ElementTree as ET
55

6-
from tableaudocumentapi import Workbook, Datasource, Connection
7-
8-
TABLEAU_93_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?>
9-
<workbook source-build='9.3.1 (9300.16.0510.0100)' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
10-
<datasources>
11-
<datasource caption='xy (TestV1)' inline='true' name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' version='9.3'>
12-
<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''>
13-
</connection>
14-
</datasource>
15-
</datasources>
16-
</workbook>'''
17-
18-
TABLEAU_93_TDS = '''<?xml version='1.0' encoding='utf-8' ?>
19-
<datasource formatted-name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' inline='true' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'>
20-
<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''>
21-
</connection>
22-
</datasource>'''
6+
from tableaudocumentapi import Workbook, Datasource, Connection, ConnectionParser
7+
8+
9+
TABLEAU_93_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?><workbook source-build='9.3.1 (9300.16.0510.0100)' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'><datasources><datasource caption='xy (TestV1)' inline='true' name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' version='9.3'><connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection></datasource></datasources></workbook>'''
10+
11+
TABLEAU_93_TDS = '''<?xml version='1.0' encoding='utf-8' ?><datasource formatted-name='sqlserver.17u3bqc16tjtxn14e2hxh19tyvpo' inline='true' source-platform='mac' version='9.3' xmlns:user='http://www.tableausoftware.com/xml/user'><connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection></datasource>'''
12+
13+
TABLEAU_10_TDS = '''<?xml version='1.0' encoding='utf-8' ?><datasources><datasource caption='xy+ (Multiple Connections)' inline='true' name='federated.1s4nxn20cywkdv13ql0yk0g1mpdx' version='10.0'><connection class='federated'><named-connections><named-connection caption='mysql55.test.tsi.lan' name='mysql.1ewmkrw0mtgsev1dnurma1blii4x'><connection class='mysql' dbname='testv1' odbc-native-protocol='yes' port='3306' server='mysql55.test.tsi.lan' source-charset='' username='test' /></named-connection><named-connection caption='mssql2012.test.tsi.lan' name='sqlserver.1erdwp01uqynlb14ul78p0haai2r'><connection authentication='sqlserver' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username='test' /></named-connection></named-connections></connection></datasource></datasources>'''
2314

2415
TABLEAU_10_WORKBOOK = '''<?xml version='1.0' encoding='utf-8' ?><workbook source-build='0.0.0 (0000.16.0510.1300)' source-platform='mac' version='10.0' xmlns:user='http://www.tableausoftware.com/xml/user'><datasources><datasource caption='xy+ (Multiple Connections)' inline='true' name='federated.1s4nxn20cywkdv13ql0yk0g1mpdx' version='10.0'><connection class='federated'><named-connections><named-connection caption='mysql55.test.tsi.lan' name='mysql.1ewmkrw0mtgsev1dnurma1blii4x'><connection class='mysql' dbname='testv1' odbc-native-protocol='yes' port='3306' server='mysql55.test.tsi.lan' source-charset='' username='test' /></named-connection><named-connection caption='mssql2012.test.tsi.lan' name='sqlserver.1erdwp01uqynlb14ul78p0haai2r'><connection authentication='sqlserver' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username='test' /></named-connection></named-connections></connection></datasource></datasources></workbook>'''
2516

2617
TABLEAU_CONNECTION_XML = ET.fromstring(
2718
'''<connection authentication='sspi' class='sqlserver' dbname='TestV1' odbc-native-protocol='yes' one-time-sql='' server='mssql2012.test.tsi.lan' username=''></connection>''')
2819

29-
3020
class HelperMethodTests(unittest.TestCase):
3121

3222
def test_is_valid_file_with_valid_inputs(self):
@@ -39,13 +29,23 @@ def test_is_valid_file_with_invalid_inputs(self):
3929
self.assertFalse(Workbook._is_valid_file('file1.tds2'))
4030
self.assertFalse(Workbook._is_valid_file('file2.twb3'))
4131

32+
4233
class ConnectionParserTests(unittest.TestCase):
4334

4435
def test_can_extract_legacy_connection(self):
45-
pass
36+
parser = ConnectionParser(ET.fromstring(TABLEAU_93_TDS), '9.2')
37+
connection = parser.get_connections()
38+
self.assertIsInstance(connection, Connection)
39+
self.assertEqual(connection.dbname, 'TestV1')
40+
4641

4742
def test_can_extract_federated_connections(self):
48-
pass
43+
parser = ConnectionParser(ET.fromstring(TABLEAU_10_TDS), '10.0')
44+
connections = parser.get_connections()
45+
self.assertIsInstance(connections, list)
46+
self.assertIsInstance(connections[0], Connection)
47+
self.assertEqual(connections[0].dbname, 'testv1')
48+
4949

5050
class ConnectionModelTests(unittest.TestCase):
5151

@@ -122,33 +122,35 @@ def test_can_update_datasource_connection_and_save(self):
122122
new_wb = Workbook(self.workbook_file.name)
123123
self.assertEqual(new_wb.datasources[0].connection.dbname, 'newdb.test.tsi.lan')
124124

125-
def test_can_update_datasource_connection_and_saveV10(self):
126-
temp = io.FileIO('v10test.twb', 'w')
127-
temp.write(TABLEAU_10_WORKBOOK.encode())
128-
temp.seek(0)
129-
original_wb = Workbook(temp.name)
130-
original_wb.datasources[0].connection[0].dbname = 'newdb.test.tsi.lan'
131125

132-
original_wb.save()
126+
class WorkbookModelV10Tests(unittest.TestCase):
133127

134-
new_wb = Workbook(temp.name)
135-
self.assertEqual(new_wb.datasources[0].connection[0].dbname, 'newdb.test.tsi.lan')
128+
def setUp(self):
129+
self.workbook_file = io.FileIO('testv10.twb', 'w')
130+
self.workbook_file.write(TABLEAU_10_WORKBOOK.encode('utf8'))
131+
self.workbook_file.seek(0)
136132

137-
temp.close()
138-
os.unlink(temp.name)
133+
def tearDown(self):
134+
self.workbook_file.close()
135+
os.unlink(self.workbook_file.name)
139136

140137
def test_can_extract_datasourceV10(self):
141-
temp = io.FileIO('v10test.twb', 'w')
142-
temp.write(TABLEAU_10_WORKBOOK.encode())
143-
temp.seek(0)
144-
wb = Workbook(temp.name)
138+
wb = Workbook(self.workbook_file.name)
145139
self.assertEqual(len(wb.datasources), 1)
146140
self.assertEqual(len(wb.datasources[0].connection), 2)
147141
self.assertIsInstance(wb.datasources[0].connection, list)
148142
self.assertIsInstance(wb.datasources[0], Datasource)
149143
self.assertEqual(wb.datasources[0].name,
150144
'federated.1s4nxn20cywkdv13ql0yk0g1mpdx')
151-
temp.close()
145+
146+
def test_can_update_datasource_connection_and_saveV10(self):
147+
original_wb = Workbook(self.workbook_file.name)
148+
original_wb.datasources[0].connection[0].dbname = 'newdb.test.tsi.lan'
149+
150+
original_wb.save()
151+
152+
new_wb = Workbook(self.workbook_file.name)
153+
self.assertEqual(new_wb.datasources[0].connection[0].dbname, 'newdb.test.tsi.lan')
152154

153155
if __name__ == '__main__':
154156
unittest.main()

0 commit comments

Comments
 (0)
0