@@ -1,5 +1,5 @@ | |||||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
# Generated by Django 1.9.2 on 2016-02-04 21:50 | |||||
# Generated by Django 1.9.5 on 2016-04-06 10:11 | |||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
from django.conf import settings | from django.conf import settings | ||||
@@ -27,7 +27,7 @@ class Migration(migrations.Migration): | |||||
('is_admin', models.BooleanField(default=False)), | ('is_admin', models.BooleanField(default=False)), | ||||
], | ], | ||||
options={ | options={ | ||||
'abstract': False, | |||||
'verbose_name_plural': 'Users', | |||||
}, | }, | ||||
), | ), | ||||
migrations.CreateModel( | migrations.CreateModel( | ||||
@@ -36,7 +36,8 @@ class Migration(migrations.Migration): | |||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='created')), | ('created', models.DateTimeField(auto_now_add=True, verbose_name='created')), | ||||
('modified', models.DateTimeField(auto_now=True, verbose_name='modified')), | ('modified', models.DateTimeField(auto_now=True, verbose_name='modified')), | ||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), | ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), | ||||
('site', models.CharField(max_length=255)), | |||||
('login', models.CharField(default='', max_length=255)), | |||||
('site', models.CharField(default='', max_length=255)), | |||||
('title', models.CharField(blank=True, max_length=255, null=True)), | ('title', models.CharField(blank=True, max_length=255, null=True)), | ||||
('username', models.CharField(blank=True, max_length=255, null=True)), | ('username', models.CharField(blank=True, max_length=255, null=True)), | ||||
('email', models.EmailField(blank=True, max_length=254, null=True)), | ('email', models.EmailField(blank=True, max_length=254, null=True)), | ||||
@@ -81,7 +81,8 @@ class PasswordInfo(models.Model): | |||||
class Entry(DateMixin): | class Entry(DateMixin): | ||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) | id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) | ||||
user = models.ForeignKey(LessPassUser, on_delete=models.CASCADE, related_name='entries') | user = models.ForeignKey(LessPassUser, on_delete=models.CASCADE, related_name='entries') | ||||
site = models.CharField(max_length=255) | |||||
login = models.CharField(max_length=255, default='') | |||||
site = models.CharField(max_length=255, default='') | |||||
password = models.ForeignKey(PasswordInfo) | password = models.ForeignKey(PasswordInfo) | ||||
title = models.CharField(max_length=255, null=True, blank=True) | title = models.CharField(max_length=255, null=True, blank=True) | ||||
@@ -94,4 +95,4 @@ class Entry(DateMixin): | |||||
verbose_name_plural = "Entries" | verbose_name_plural = "Entries" | ||||
def __str__(self): | def __str__(self): | ||||
return self.title | |||||
return str(self.id) |
@@ -30,11 +30,13 @@ class PasswordInfoSerializer(serializers.ModelSerializer): | |||||
class EntrySerializer(serializers.ModelSerializer): | class EntrySerializer(serializers.ModelSerializer): | ||||
site = serializers.CharField(allow_blank=True) | |||||
login = serializers.CharField(allow_blank=True) | |||||
password = PasswordInfoSerializer() | password = PasswordInfoSerializer() | ||||
class Meta: | class Meta: | ||||
model = models.Entry | model = models.Entry | ||||
fields = ('id', 'site', 'password', 'title', 'username', 'email', 'description', 'url', 'created', 'modified') | |||||
fields = ('id', 'site', 'login', 'password', 'created', 'modified') | |||||
read_only_fields = ('created', 'modified') | read_only_fields = ('created', 'modified') | ||||
def create(self, validated_data): | def create(self, validated_data): | ||||
@@ -45,10 +47,10 @@ class EntrySerializer(serializers.ModelSerializer): | |||||
def update(self, instance, validated_data): | def update(self, instance, validated_data): | ||||
password_data = validated_data.pop('password') | password_data = validated_data.pop('password') | ||||
passwordInfo = instance.password | |||||
password_info = instance.password | |||||
for attr, value in password_data.items(): | for attr, value in password_data.items(): | ||||
setattr(passwordInfo, attr, value) | |||||
passwordInfo.save() | |||||
setattr(password_info, attr, value) | |||||
password_info.save() | |||||
for attr, value in validated_data.items(): | for attr, value in validated_data.items(): | ||||
setattr(instance, attr, value) | setattr(instance, attr, value) | ||||
@@ -50,6 +50,7 @@ class LoginApiTestCase(APITestCase): | |||||
def test_create_entry(self): | def test_create_entry(self): | ||||
entry = { | entry = { | ||||
"site": "twitter", | "site": "twitter", | ||||
"login": "guillaume@oslab.fr", | |||||
"password": { | "password": { | ||||
"counter": 1, | "counter": 1, | ||||
"settings": [ | "settings": [ | ||||
@@ -60,11 +61,6 @@ class LoginApiTestCase(APITestCase): | |||||
], | ], | ||||
"length": 12 | "length": 12 | ||||
}, | }, | ||||
"title": "twitter", | |||||
"username": "guillaume20100", | |||||
"email": "guillaume@oslab.fr", | |||||
"description": "", | |||||
"url": "https://twitter.com/" | |||||
} | } | ||||
self.assertEqual(0, models.Entry.objects.count()) | self.assertEqual(0, models.Entry.objects.count()) | ||||
self.assertEqual(0, models.PasswordInfo.objects.count()) | self.assertEqual(0, models.PasswordInfo.objects.count()) | ||||
@@ -77,6 +73,7 @@ class LoginApiTestCase(APITestCase): | |||||
self.assertNotEqual('facebook', entry.site) | self.assertNotEqual('facebook', entry.site) | ||||
new_entry = { | new_entry = { | ||||
"site": "facebook", | "site": "facebook", | ||||
"login": "", | |||||
"password": { | "password": { | ||||
"counter": 1, | "counter": 1, | ||||
"settings": [ | "settings": [ | ||||
@@ -86,13 +83,9 @@ class LoginApiTestCase(APITestCase): | |||||
], | ], | ||||
"length": 12 | "length": 12 | ||||
}, | }, | ||||
"title": "facebook", | |||||
"username": "", | |||||
"email": "", | |||||
"description": "", | |||||
"url": "https://facebook.com/" | |||||
} | } | ||||
self.client.put('/api/entries/%s/' % entry.id, new_entry) | |||||
request = self.client.put('/api/entries/%s/' % entry.id, new_entry) | |||||
self.assertEqual(200, request.status_code, request.content.decode('utf-8')) | |||||
entry_updated = models.Entry.objects.get(id=entry.id) | entry_updated = models.Entry.objects.get(id=entry.id) | ||||
self.assertEqual('facebook', entry_updated.site) | self.assertEqual('facebook', entry_updated.site) | ||||
self.assertEqual(3, len(json.loads(entry_updated.password.settings))) | self.assertEqual(3, len(json.loads(entry_updated.password.settings))) | ||||