"""File containing Member app tests.""" from django.test import TestCase, Client from unittest import skip from django.contrib.auth.models import User from members.models import Member, Payment, Request from rest_framework.authtoken.models import Token import logging import os import pyexcel class MemberRegisterTestCase(TestCase): """Tests member registration.""" def setUp(self): """Setup testing environment by creating member and admin.""" memb = Member.objects.create( first_name="Tidus", last_name="Tester", email="tidus@tester.fi" ) payment = Payment.objects.create(member=memb, source="AYY") appl = Request.objects.create( first_name="Liisa", last_name="Mattila", email="liisa.mattila@pylly.com", POR="Kouvola", AYY=True, jas=False, ) username, password = "test_admin", "password123" test_admin = User.objects.create_superuser( username, "myemail@test.com", password ) self.c = Client() self.c.login(username=username, password=password) def test_member_created(self): """Test member creation.""" exists = Member.objects.filter(first_name="Tidus").exists() self.assertTrue(exists) def test_import_csv_single_line(self): """Test csv import only with single line in csv file.""" current_dir = os.path.dirname(os.path.abspath(__file__)) with open( os.path.join(current_dir, "test_resources", "single_line_import.csv") ) as csvFile: response = self.c.post( "/members/import_csv", {"csvFile": csvFile, "delimiter": ";", "payment_source": "AYY"}, follow=True, ) self.assertEqual(response.status_code, 200) def test_import_csv_multi_line(self): """Test csv import with multilined csv.""" current_dir = os.path.dirname(os.path.abspath(__file__)) with open( os.path.join(current_dir, "test_resources", "multi_line_import.csv") ) as csvFile: response = self.c.post( "/members/import_csv", {"csvFile": csvFile, "delimiter": ";", "payment_source": "AYY"}, follow=True, ) self.assertEqual(response.status_code, 200) def test_autocomplete_search_found(self): """Test member autocomplete search""" search_terms = "Tidus" response = self.c.get( "/members/member-autocomplete?q={}".format(search_terms), follow=True ) results = response.json()["results"] self.assertEqual(len(results), 1) def test_autocomplete_search_not_found(self): """Test member autocomplete search""" search_terms = "Notfound" response = self.c.get( "/members/member-autocomplete?q={}".format(search_terms), follow=True ) results = response.json()["results"] self.assertEqual(len(results), 0) def test_export_members_excel(self): """Test if the user can download an excel file of the member register""" resp = self.c.get("/members/export_members") content_type = "application/vnd.ms-excel" self.assertIn(content_type, resp["Content-Type"]) content = resp.content arrays = pyexcel.get_array(file_content=content, file_type="xlsx") tidus_array = ["Tidus", "Tester", "tidus@tester.fi", "", "0", "0"] self.assertIn(tidus_array, arrays) def test_export_payments_excel(self): """Test if the user can download an excel file of the payment register""" resp = self.c.get("/members/export_payments") content_type = "application/vnd.ms-excel" self.assertIn(content_type, resp["Content-Type"]) content = resp.content arrays = pyexcel.get_array(file_content=content, file_type="xlsx") created = Payment.objects.get(member__email="tidus@tester.fi").date.strftime( "%Y-%m-%d %H:%M:%S" ) tidus_array = ["Tidus Tester", created, "AYY"] self.assertIn(tidus_array, arrays) def test_export_applications_excel(self): """Test if the user can download an excel file of the member application register""" resp = self.c.get("/members/export_applications") content_type = "application/vnd.ms-excel" self.assertIn(content_type, resp["Content-Type"]) content = resp.content arrays = pyexcel.get_array(file_content=content, file_type="xlsx") submitted = Request.objects.get( email="liisa.mattila@pylly.com" ).submitted.strftime("%Y-%m-%d %H:%M:%S") liisa_array = [ "Liisa", "Mattila", "liisa.mattila@pylly.com", "Kouvola", "1", "0", submitted, ] self.assertIn(liisa_array, arrays) def test_submit_member_application(self): """Test if submitting a member application works""" data = { "first_name": "Seppo", "last_name": "Saastamoinen", "email": "seppo@saastamoin.en", "jas": "on", "POR": "Dipolin viinibaari", } resp = self.c.post("/members/submit_application", data=data) self.assertEqual(resp.status_code, 200) self.assertTrue(Request.objects.filter(email="seppo@saastamoin.en").exists())