from user import User
import test_engine
import testsamples

class TestUser(test_engine.EngineTestCase):
  # pylint: disable=no-member
  def setUp(self):
    super(TestUser, self).setUp()
    self.load_sample(testsamples.sample_students)

  def test_constructor_sets_user_attributes(self):
    data = {
      'Access': 'owners',
      'Name': 'Foo Bar',
      'Email': 'email@example.com',
      'UserID': 1,
      'LinkKey': {
        'Param1': 'Param1Value',
        'Param2': 'Param2Value'
      },
      'Origin': 'https://getgrist.com',
      'StudentInfo': ['Students', 1]
    }
    u = User(data, self.engine.tables)
    self.assertEqual(u.Name, 'Foo Bar')
    self.assertEqual(u.Email, 'email@example.com')
    self.assertEqual(u.UserID, 1)
    self.assertEqual(u.LinkKey.Param1, 'Param1Value')
    self.assertEqual(u.LinkKey.Param2, 'Param2Value')
    self.assertEqual(u.Access, 'owners')
    self.assertEqual(u.Origin, 'https://getgrist.com')
    self.assertEqual(u.StudentInfo.id, 1)
    self.assertEqual(u.StudentInfo.firstName, 'Barack')
    self.assertEqual(u.StudentInfo.lastName, 'Obama')
    self.assertEqual(u.StudentInfo.schoolName, 'Columbia')

  def test_setting_is_sample_substitutes_attributes_with_samples(self):
    data = {
      'Access': 'owners',
      'Name': None,
      'Email': 'email@getgrist.com',
      'UserID': 1,
      'LinkKey': {
        'Param1': 'Param1Value',
        'Param2': 'Param2Value'
      },
      'Origin': 'https://getgrist.com',
      'StudentInfo': ['Students', 1]
    }
    u = User(data, self.engine.tables, is_sample=True)
    self.assertEqual(u.StudentInfo.id, 0)
    self.assertEqual(u.StudentInfo.firstName, '')
    self.assertEqual(u.StudentInfo.lastName, '')
    self.assertEqual(u.StudentInfo.schoolName, '')
