From 87f49191db9ff09f46bdc2ae3e6a346fcc15e2c3 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Thu, 4 Nov 2010 17:13:54 -0700 Subject: [PATCH] Fix instanciating an object from the database. Write core Crud properties to the db. --- lib/WebGUI/Crud.pm | 11 +++++++++-- t/Crud.t | 48 ++++++++++++++++++++++------------------------ 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/lib/WebGUI/Crud.pm b/lib/WebGUI/Crud.pm index 49dff756e..ff741c461 100644 --- a/lib/WebGUI/Crud.pm +++ b/lib/WebGUI/Crud.pm @@ -105,7 +105,7 @@ around BUILDARGS => sub { WebGUI::Error::ObjectNotFound->throw(error=>'no such '.$tableKey, id=>$identifier); } $data->{session} = $session; - return $class->$orig(@_); + return $class->$orig($data); }; =head1 NAME @@ -466,7 +466,7 @@ sub crud_updateTable { foreach my $property_name (@property_names) { my $property = $class->meta->find_attribute_by_name($property_name); my $form_properties = $property->form; - my $control = WebGUI::Form::DynamicField->new( $session, fieldType => $form_properties->fieldType,); + my $control = WebGUI::Form::DynamicField->new( $session, fieldType => $form_properties->{fieldType},); my $fieldType = $control->getDatabaseFieldType; my $isKey = $property->isQueryKey; my $default = $property->default; @@ -972,6 +972,13 @@ sub write { } $data->{$property_name} = $value; } + my $tableKey = $self->meta->tableKey; + $data->{$tableKey} = $self->$tableKey; + $data->{lastUpdated} = $self->lastUpdated; + $data->{dateCreated} = $self->dateCreated; + if (my $sequenceKey = $self->meta->sequenceKey) { + $data->{$sequenceKey} = $self->$sequenceKey; + } $session->db->setRow($self->tableName, $self->tableKey, $data); } diff --git a/t/Crud.t b/t/Crud.t index f2b037042..39d82ed9c 100644 --- a/t/Crud.t +++ b/t/Crud.t @@ -30,11 +30,9 @@ extends 'WebGUI::Crud'; define tableName => 'some_crud_table'; define tableKey => 'id'; -property id => ( +has id => ( required => 1, is => 'ro', - label => 'id', - fieldType => 'hidden', ); package main; @@ -73,15 +71,15 @@ $sth->finish; my $record1 = WebGUI::Cruddy->new($session); can_ok($record1, 'id'); isa_ok($record1, "WebGUI::Crud", "isa WebGUI::Crud"); -like($record1->get('dateCreated'), qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "dateCreated looks like a date"); -like($record1->get('lastUpdated'), qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "lastUpdated looks like a date"); -like($record1->get('sequenceNumber'), qr/\d+/, "sequenceNumber looks like a number"); -is($record1->get('sequenceNumber'), 1, "record 1 sequenceNumber is 1"); -like($record1->get('id'), qr/[A-Za-z0-9_-]{22}/, "id looks like a guid"); +like($record1->dateCreated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "dateCreated looks like a date"); +like($record1->lastUpdated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "lastUpdated looks like a date"); +like($record1->sequenceNumber, qr/\d+/, "sequenceNumber looks like a number"); +is($record1->sequenceNumber, 1, "record 1 sequenceNumber is 1"); +like($record1->id, qr/[A-Za-z0-9_-]{22}/, "id looks like a guid"); # custom id my $record2 = WebGUI::Cruddy->new($session, {id=>'theshawshankredemption'}); -is($record2->get('id'),'theshawshankredemption',"custom id works"); +is($record2->id,'theshawshankredemption',"custom id works"); $record2->delete; # instanciation @@ -92,39 +90,39 @@ my $copyOfRecord2 = WebGUI::Cruddy->new($session, $record2->getId); is($record2->getId, $copyOfRecord2->getId, "can reinstanciate record"); # sequencing -is($record2->get('sequenceNumber'), 2, "record 1 sequenceNumber is 2"); -my $record3 = WebGUI::Cruddy->create($session); -is($record3->get('sequenceNumber'), 3, "record 1 sequenceNumber is 3"); -my $record4 = WebGUI::Cruddy->create($session); -is($record4->get('sequenceNumber'), 4, "record 1 sequenceNumber is 4"); +is($record2->sequenceNumber, 2, "record 1 sequenceNumber is 2"); +my $record3 = WebGUI::Cruddy->new($session); +is($record3->sequenceNumber, 3, "record 1 sequenceNumber is 3"); +my $record4 = WebGUI::Cruddy->new($session); +is($record4->sequenceNumber, 4, "record 1 sequenceNumber is 4"); ok($record4->demote, "demotion reports success"); -is($record4->get('sequenceNumber'), 4, "can't demote further than end"); +is($record4->sequenceNumber, 4, "can't demote further than end"); ok($record1->promote, "promotion reports success"); -is($record1->get('sequenceNumber'), 1, "can't promote further than beginning"); +is($record1->sequenceNumber, 1, "can't promote further than beginning"); $record4->promote; -is($record4->get('sequenceNumber'), 3, "promotion from end works"); +is($record4->sequenceNumber, 3, "promotion from end works"); $record4->demote; -is($record4->get('sequenceNumber'), 4, "demotion to end works"); +is($record4->sequenceNumber, 4, "demotion to end works"); $record1->demote; -is($record1->get('sequenceNumber'), 2, "demotion from beginning works"); +is($record1->sequenceNumber, 2, "demotion from beginning works"); $record1->promote; -is($record1->get('sequenceNumber'), 1, "promotion to beginning works"); +is($record1->sequenceNumber, 1, "promotion to beginning works"); $record2->demote; -is($record2->get('sequenceNumber'), 3, "demotion from middle works"); +is($record2->sequenceNumber, 3, "demotion from middle works"); $record2->promote; -is($record2->get('sequenceNumber'), 2, "promotion from middle works"); +is($record2->sequenceNumber, 2, "promotion from middle works"); # deleting ok($record2->delete, "deletion reports success"); my $copyOfRecord3 = WebGUI::Cruddy->new($session, $record3->getId); my $copyOfRecord4 = WebGUI::Cruddy->new($session, $record4->getId); -is($copyOfRecord3->get('sequenceNumber'), '2', "deletion of record 2 moved record 3 to sequence 2"); -is($copyOfRecord4->get('sequenceNumber'), '3', "deletion of record 2 moved record 4 to sequence 3"); +is($copyOfRecord3->sequenceNumber, '2', "deletion of record 2 moved record 3 to sequence 2"); +is($copyOfRecord4->sequenceNumber, '3', "deletion of record 2 moved record 4 to sequence 3"); # updating sleep 1; ok($copyOfRecord4->update, "update returns success"); -isnt($copyOfRecord4->get('lastUpdated'), $copyOfRecord4->get('dateCreated'), "updates work"); +isnt($copyOfRecord4->lastUpdated, $copyOfRecord4->get('dateCreated'), "updates work"); # retrieve data my ($sql, $params) = WebGUI::Cruddy->getAllSql($session);