emailservices/emailstore/tsrc/message_store_test/src/MailboxTests.cpp
changeset 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/tsrc/message_store_test/src/MailboxTests.cpp	Thu Jan 07 12:38:38 2010 +0200
@@ -0,0 +1,292 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Base class for all test cases class member functions
+*
+*/
+
+
+
+// [INCLUDE FILES] - do not remove
+#include <tz.h>
+#include "MailboxTests.h"
+#include <msgstoreapi.h>
+//#include <ismsgstorepropertykeys.h>        
+        
+// ============================ MEMBER FUNCTIONS ===============================
+
+CMailboxTests* CMailboxTests::NewL( CStifLogger* aLog )
+    {
+    CMailboxTests* self = new(ELeave) CMailboxTests( aLog );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+CMailboxTests::CMailboxTests( CStifLogger* aLog ) : CAsyncTestCaseBase( aLog ) 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CMailboxTests::~CMailboxTests()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+void CMailboxTests::ConstructL()
+    {
+    CAsyncTestCaseBase::ConstructL();
+    }
+
+// -----------------------------------------------------------------------------
+// ExecuteL : start executing the test case
+// -----------------------------------------------------------------------------
+TBool CMailboxTests::ExecuteL()
+    {
+    LogHeader( _L("Mailbox") );
+    
+    //StartRecordingObserverEvents();
+    TInt32 owner1 = 1234;
+    TInt32 owner2 = 5678;
+    _LIT(KName1, "My Account");
+    _LIT(KName2, "Your Account");
+    
+    iLog->Log( _L("Case %d: Account Object"), iCaseId++ );
+    
+    iLog->Log( _L("  Test Accounts in Memory") );
+    
+    CMsgStoreAccount* testAcc = CMsgStoreAccount::NewLC(9999, _L("test accoun"));  //+testAcc
+    CheckCondition( _L("owner id"), testAcc->Owner() == 9999 );
+    CheckCondition( _L("account name"), testAcc->Name() == _L("test accoun") );
+    
+    _LIT( KChangeAccountOwner, "  Change Account Owner" );
+    iLog->Log( KChangeAccountOwner );
+    testAcc->SetOwner( 8888 );
+    CheckCondition( _L("new owner id"), testAcc->Owner() == 8888 );
+    
+    _LIT( KChangeAccountNameLong, "  Change Account Name (long)" );
+    iLog->Log( KChangeAccountNameLong );
+    testAcc->SetNameL( _L("this is a very very long account name") );
+    CheckCondition( _L("new account name"), testAcc->Name() == _L("this is a very very long account name") );
+    
+    _LIT( KChangeAccountNameShort, "  Change Account Name (short)" );
+    iLog->Log( KChangeAccountNameShort );
+    testAcc->SetNameL( _L("sl name") );
+    CheckCondition( _L("new account name"), testAcc->Name() == _L("sl name") ) ;
+    
+    CleanupStack::PopAndDestroy( testAcc );
+    
+    iLog->Log( _L("Case %d: Create Mailboxes"), iCaseId++ );
+    
+    //account 1
+    CMsgStoreMailBox* mailBox1 = NULL;
+    CMsgStoreAccount* account1 = CMsgStoreAccount::NewLC( owner1, KNullDesC );   //+1
+    
+    TRAPD( err, mailBox1 = iMsgStore->CreateAccountL( *account1 ) );
+    
+    CleanupStack::PushL( mailBox1 );                                            //+2
+    CheckCondition( _L("Id1, empty name"), err == KErrNone );
+    
+    //mailbox 1 should be set as default mailbox now
+    iLog->Log( _L("  mailbox1Id=%d, isCorporate=%d"), mailBox1->Id(), mailBox1->IsCorporateMailbox() );
+    
+    //account 2, with propertyes
+    CMsgStoreMailBox* mailBox2 = NULL;
+    CMsgStoreAccount* account2 = CMsgStoreAccount::NewLC( owner1, KName1 );      //+3
+    
+    CMsgStorePropertyContainer* properties = CMsgStorePropertyContainer::NewL();
+    properties->AddPropertyL(_L8("mailbox property"), _L("maibox property value"));
+    
+    TUint32 aSourceId = 0x80001;
+    TUint32 feature = 0x1f;
+    properties->AddOrUpdatePropertyL( KIsPropertyEmailSourceId, aSourceId );
+    properties->AddOrUpdatePropertyL( KIsPropertyCapabilities, feature );
+    
+    mailBox2 = iMsgStore->CreateAccountL( *account2, properties );    
+   
+    CleanupStack::PushL( mailBox2 );                                            //+4
+    
+    //mailbox 1 should be set as default mailbox now
+    iLog->Log( _L("  mailbox2Id=%d, isCorporate=%d"), mailBox2->Id(), mailBox2->IsCorporateMailbox() );
+    
+    ComparePropertiesL( *mailBox2, *properties );
+    delete properties;
+    
+    //account 3
+    CMsgStoreMailBox* mailBox3 = NULL;
+    CMsgStoreAccount* account3 = CMsgStoreAccount::NewLC( owner2, KNullDesC );    //+5
+    
+    TRAP( err, mailBox3 = iMsgStore->CreateAccountL( *account3 ) );    
+    
+    CleanupStack::PushL( mailBox3 );                                            //+6
+    CheckCondition( _L("Id2, empty name"), err == KErrNone );
+    //mailbox 1 should be set as default mailbox now
+    iLog->Log( _L("  mailbox3Id=%d, isCorporate=%d"), mailBox3->Id(), mailBox3->IsCorporateMailbox() );
+    
+    //account 4
+    CMsgStoreMailBox* mailBox4 = NULL;
+    CMsgStoreAccount* account4 = CMsgStoreAccount::NewLC( owner2, KName2 );       //+7
+    
+    properties = CMsgStorePropertyContainer::NewL();
+    properties->AddOrUpdatePropertyL( KIsPropertyServerType, (TUint32)ESrvExchange );
+    
+    TRAP( err, mailBox4 = iMsgStore->CreateAccountL( *account4, properties ) );  
+    delete properties;
+    
+    CleanupStack::PushL( mailBox4 );                                              //+8
+    CheckCondition( _L("Id2, name2"), err == KErrNone );
+    iLog->Log( _L("  mailbox4Id=%d, isCorporate=%d"), mailBox4->Id(), mailBox4->IsCorporateMailbox() );
+    
+    //test account aready exists error
+    iLog->Log( _L("Case %d: Error - Test Account Exists"), iCaseId++ );
+    
+    CMsgStoreMailBox* mailBox = NULL;
+    TRAP( err, mailBox = iMsgStore->CreateAccountL( *account1 ) );    
+    delete mailBox;
+    mailBox = NULL;
+    CheckCondition( _L("account1 exists - empty name"), err == KErrAlreadyExists );
+    
+    TRAP( err, mailBox = iMsgStore->CreateAccountL( *account4 ) );    
+    delete mailBox;
+    mailBox = NULL;
+    CheckCondition( _L("account2 exists - name2"), err == KErrAlreadyExists );
+
+    DoListAccountsL( *iMsgStore );
+
+    iLog->Log( _L("Case %d: Set/Get Default Mailbox"), iCaseId++ );
+    iMsgStore->SetDefaultMailboxL( mailBox3->Id() );
+    
+    TMsgStoreId id = iMsgStore->DefaultMailboxL();
+    CheckCondition( _L("DefaultMailboxL() is now account3"), mailBox3->Id() );
+    
+    iLog->Log( _L("Case %d: Open Account by Account Object"), iCaseId++ );
+    mailBox = iMsgStore->OpenAccountL( *account1 );
+    CheckCondition( _L("open account 1"), mailBox->Id() == mailBox1->Id() );
+    iLog->Log( _L("  mailbox1Id=%d, isCorporate=%d"), mailBox->Id(), mailBox->IsCorporateMailbox() );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( *account2 );
+    CheckCondition( _L("open account 2"), mailBox->Id() == mailBox2->Id() );
+    iLog->Log( _L("  mailbox2Id=%d, isCorporate=%d"), mailBox->Id(), mailBox->IsCorporateMailbox() );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( *account3 );
+    CheckCondition( _L("open account 3"), mailBox->Id() == mailBox3->Id() );
+    iLog->Log( _L("  mailbox3Id=%d, isCorporate=%d"), mailBox->Id(), mailBox->IsCorporateMailbox() );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( *account4 );
+    CheckCondition( _L("open account 4"), mailBox->Id() == mailBox4->Id() );
+    iLog->Log( _L("  mailbox4Id=%d, isCorporate=%d"), mailBox->Id(), mailBox->IsCorporateMailbox() );
+    delete mailBox;
+    
+    iLog->Log( _L("Case %d: Open Account by MailBoxId"), iCaseId++ );
+    mailBox = iMsgStore->OpenAccountL( mailBox1->Id() );
+    CheckCondition( _L("open account 1 by MailBoxId"), mailBox->Id() == mailBox1->Id() );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( mailBox2->Id() );
+    CheckCondition( _L("open account 2 by MailBoxId"), mailBox->Id() == mailBox2->Id() );
+    //ComparePropertiesL( *mailBox, *mailBox2 );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( mailBox3->Id() );
+    CheckCondition( _L("open account 3 by MailBoxId"), mailBox->Id() == mailBox3->Id() );
+    //ComparePropertiesL( *mailBox, *mailBox3 );
+    delete mailBox;
+    
+    mailBox = iMsgStore->OpenAccountL( mailBox4->Id() );
+    CheckCondition( _L("open account 4 by MailBoxId"), mailBox->Id() == mailBox4->Id() );
+    //ComparePropertiesL( *mailBox, *mailBox4 );
+    delete mailBox;
+    mailBox = NULL;
+    
+    iLog->Log( _L("Case %d: Error - Open Account"), iCaseId++ );
+    iLog->Log( _L("  Open an nonexisting account - bad owner id") );
+    //Open an nonexisting account - bad owner id
+    CMsgStoreAccount* badAccount1 = CMsgStoreAccount::NewLC( 1, KName2 );             //+9
+    TRAP(err, mailBox = iMsgStore->OpenAccountL(*badAccount1) );
+    CheckCondition( _L("bad ownerId"), err==KErrNotFound );
+    
+    iLog->Log( _L("  Open an nonexisting account - bad name") );
+    //Open an nonexisting account - bad name
+    CMsgStoreAccount* badAccount2 = CMsgStoreAccount::NewLC( owner1, _L("bad name") ); //+10
+    TRAP(err, mailBox = iMsgStore->OpenAccountL(*badAccount2) );
+    CheckCondition( _L("bad name"), err==KErrNotFound );
+    
+    iLog->Log( _L("Case %d: Rename Account"), iCaseId++ );
+    
+    TRAP(err, iMsgStore->RenameAccountL( account1->Owner(), account1->Name(), _L("New acc 1")) );
+    CheckCondition( _L("rename account1"), err==KErrNone );
+    
+    TRAP(err, iMsgStore->RenameAccountL( account1->Owner(), account1->Name(), _L("New acc 1")) );
+    CheckCondition( _L("rename account1 again - should return -1"), err==KErrNotFound );
+    
+    TRAP(err, iMsgStore->RenameAccountL( account4->Owner(), account4->Name(), _L("New acc 4")) );
+    CheckCondition( _L("rename account4"), err==KErrNone );
+    
+    iLog->Log( _L("Case %d: Error - Rename Account"), iCaseId++ );
+    TRAP(err, iMsgStore->RenameAccountL( account1->Owner(), _L("New acc 1"), KName1) );
+    CheckCondition( _L("new name already exists"), err==KErrAlreadyExists );
+    
+    DoListAccountsL( *iMsgStore );
+    
+    iLog->Log( _L("Case %d: Delete Account"), iCaseId++ );
+    
+    TRAP(err, iMsgStore->DeleteAccountL(*account2));
+    CheckCondition( _L("delete account2"), err==KErrNone );
+    
+    TRAP(err, iMsgStore->DeleteAccountL(*account3));
+    CheckCondition( _L("delete account3"), err==KErrNone );
+    
+    iLog->Log( _L("Case %d: Error - Delete Account"), iCaseId++ );
+    TRAP(err, iMsgStore->DeleteAccountL(*account2));
+    CheckCondition( _L("delete account2 again - should return -1"), err==KErrNotFound );
+    
+    TRAP(err, iMsgStore->DeleteAccountL(*account4));
+    CheckCondition( _L("delete account4 using old name, should return -1"), err==KErrNotFound );
+    
+    DoListAccountsL( *iMsgStore );
+    
+    CleanupStack::PopAndDestroy( 10 );
+    
+    //we are done 
+    return ETrue;
+    }
+
+void CMailboxTests::DoListAccountsL( CMsgStore& aMsgStore )
+{
+    iLog->Log( _L("  --List Accounts--") );
+    RPointerArray<CMsgStoreAccount> accounts;
+    TRAPD( err, aMsgStore.AccountsL( accounts ) );
+    CheckCondition( _L("Accounts"), err == KErrNone );
+    
+    for ( int i = 0 ; i < accounts.Count() ; i++ )
+        {
+        CMsgStoreAccount* account = accounts[i];
+        iLog->Log( _L("  id=%i, name=%S"), account->Owner(), &account->Name() );
+        }
+    
+    accounts.ResetAndDestroy();
+}
+
+
+//  End of File