From 87f603df5fcca299f291efb56142495e46f11483 Mon Sep 17 00:00:00 2001 From: Vedant P Iyer Date: Thu, 5 Sep 2024 21:32:29 -0600 Subject: [PATCH] Updated erd_test to compare output to reference er diagram image --- dsi/tests/test_plugin.py | 27 ++++++++---------------- examples/data/er-diagram.png | Bin 0 -> 28820 bytes examples/data/erd_test.sql | 39 +++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 18 deletions(-) create mode 100644 examples/data/er-diagram.png create mode 100644 examples/data/erd_test.sql diff --git a/dsi/tests/test_plugin.py b/dsi/tests/test_plugin.py index 44879322..647e52cb 100644 --- a/dsi/tests/test_plugin.py +++ b/dsi/tests/test_plugin.py @@ -1,25 +1,16 @@ from dsi.plugins import file_writer as fw import cv2 -import sqlite3 -import numpy as np +import subprocess import os def test_export_db_erd(): + subprocess.run(["sqlite3", "erd_test.db"], stdin= open("examples/data/erd_test.sql", "r")) + fw.ER_Diagram("erd_test.db").export_erd("erd_test.db", "erd_test_output") + os.remove("erd_test.db") - connection = sqlite3.connect("test.db") - cursor = connection.cursor() - cursor.execute("CREATE TABLE IF NOT EXISTS example (id INTEGER, name TEXT, age INTEGER)") - cursor.execute("INSERT INTO example VALUES (1, 'alice', 20)") - cursor.execute("INSERT INTO example VALUES (2, 'bob', 30)") - cursor.execute("INSERT INTO example VALUES (3, 'eve', 40)") - connection.commit() - connection.close() - - fw.ER_Diagram("test.db").export_erd("test.db", "test1") - - er_image = cv2.imread("test1.png") - assert er_image is not None #check if image generated at all + assert cv2.imread("erd_test_output.png") is not None #check if image generated at all - pixel_mean = np.mean(er_image) - os.remove("test1.png") - assert pixel_mean != 255 #check if image is all white pixels (no diagram generated) + assert open("examples/data/er-diagram.png","rb").read() == open("erd_test_output.png","rb").read() #check if er diagram matches reference image + os.remove("erd_test_output.png") + +test_export_db_erd() \ No newline at end of file diff --git a/examples/data/er-diagram.png b/examples/data/er-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..9c512597a5225bad10e090fc56fcb7c5871609e5 GIT binary patch literal 28820 zcmbTe2RN5+-#>n#>|~^nQIhNsDMiZ6$ezhgRw)rGqoO1<5Ro0ScSTl&(2$*El`<+K zyZFDZ`+k1UexBnw{`Y-+@9z5M^SQ3;JkR(0wcgiFy<_Sd=(*?#g4l3WL&bm~D75iU zBP})lgip127{5^4X{oCaYvg~Et1=@AVjFQ(<*<>@!|$JbEsc!VXr|v4wn)%lWw^PO z_Ntxjm1lx+p$`-gs$y#ugy-7ALu#%LN)KfiS#>T#7OHZ4zO|Dg^ybTuz$2JKG zrk_85Wh@cl0rVRRwJ zvP(qieaq9@5=^=`}?gNabrl!v-D)u_CbJ~k*rzzBzmX$RGtj_Xj zC&;r`S6A1q%DQ&je5&v|>+O9*ThQ?0yAQ;&Uo>R$f$*s)`6 zZEdy3-K*B?=;+u6cz8%(_Ve41`=8Lp-&1N%-$!T&u-XomI(OW8@Ze_TE?xQ+={= zwDj~>8@VAYGY@YT71DMCcx`Q<%J(yj|{Tz zDDK+_7Vaw4B_Qnb^bH1<<;GFfka#WiRWYS?$s%&sr(gQlbg%j2NMOg zW0gG0A6{qT(L7P%nNnGK@crrBY@V*s-A@t>GqhPIlH%jF@E5*+|4vJIO?K;On4a*R z{rZM&hEw69jJSDm5F;ZaE#dd)SJM&2tgNigGFMX%Z|}_heoJXd$!)T-vK9V+D;|4n z!gJG0G!kL|`#`!|h39dk)=X!o(Zd7YOmuW~8X6k4FK@E3aBv7&O7FHPrNwir>n*ak zwYR@^EJ6OohYy?|K78o<`l;%YclwVP*J$bo2CRDLfBm{rP_VnRtEFZ{?Z6~C)tQxOq72L!oiXJ?gNTtw6&xas`-{K9w+Z1yO(jNO?0Bx$St8{-7adrw_^m?|nN zUbVCwSzG;Ebmo)%;>wEhi4#0TVZfR{5m;7MHqBdP_%bW&=B;14i3eGh_lJjt-MMoo z@Zm#lqIPNao9ibgsij+|PmS*tUUqGLVyNvK`fdw>#h@nIdU|MxFJHe>3YB-R{%Yc* zh|+#TLu}u^eQdDi(7}TTjb_TFx-Gk!IWwxO6~DfTry+#I#9pSV-jeiN_I#X`HQb$d z99Kq3;1sF(=#C${VEoK)<;k?XygV14=T+?Hy{G#G!p3ut8UJ`J5n%ju*7#!@ZEZtC z1FAN8;9m~!htOr85tr={T#0O6W=p*H8f~nzkbck%uGDczK&yMTNgxE z_h936&7qNswjz7=;j)yJ?VBYm7d4lRx+CNUe9~I}u(7fR^>me${1ysqd7Q0)$5uD# z+LIq0pQvLzD%s7A8*#L-;F|yb;TjIh=ilQUl6&@0>COC(sH#$U{pL-uXSUvQZun{d zcSdk<@L6HY3rj(_w(JgVd74cgMxDN_ygczr6UN3&>CZ=v-}4fM#l@^wzs~>oh%&I9 zyS25|(0qTGthyJgWLatH(6?_lnr`#eH#DenZ0;zqK19?Wn5v{A_IZ4v^*De2*Vy|V zmerTbEfquKMe%h)LPErJP4%;@S1C7b-b@+D92aXNHdwnS_G*gRYQtB}9Dj{9-RxmXk;BTGwdob;%>clC!?3=Is%-X-cR5fd|8KE92Yb2l(CF)8!P*14p4Y5qIsiE@u% z2k8%@(e)IOWs)@5nYTxzKfHaL-!5~qiLcvae3!ZAp1pgo7Zv>y9Tm>_XAw)k!DpPl z_lNMCSFdQ9n3%k*nC#!Erac(YdC#}>XK7Y`cTRG$l225z2zI=rtgNx~hq({O8e?5# zL!0I5>g&(Ve>cbB+K%=@K|$eVVP#;zdU0;T_{Z(+B)6=o3(}27Ir8Q zS|+=4wpdkPHa{)j;C3|IVDN`SSe8i|ZS0&5|6QSQKQw+Ru7;iaffUyNJEUNcw<5`Y z`?I;3S!acGuJdq;es22k9uhrdb)Sk2r90 zTa$&4Z{wv)m(Z?w-X$vJ^t`(wWujbW{^)78SM%0A0RaJ&N{9YTUn_JUYfEuBd2*-Q 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